当前位置: 首页 > article >正文

Django基础-创建新项目,各文件作用

学习Django的前置知识:

  • python基本语法:需要掌握Python中的变量、循环、条件判断、函数等基本概念。
  • 面向对象编程(OOP):Django的核心架构基于面向对象编程,许多功能(如模型和视图)依赖于类和方法的设计。因此,学习Python的面向对象部分是必需的。你需要理解以下概念:
    • 类与对象:如何定义和使用类。
    • 继承多态:如何通过继承实现代码复用和扩展。
    • 封装:如何隐藏实现细节,提供接口。

2. HTML/CSS基础

  • HTML:了解基本的页面结构,标签和属性。
  • CSS:用于样式化网页,可以帮助你在Django项目中自定义前端页面的展示。

3. JavaScript基础

  • 基础语法:用于实现页面上的交互和动态效果。
  • AJAX:可以在不刷新页面的情况下与服务器进行通信,常用于Django中的异步操作。

4. 数据库基础

  • SQL:了解基本的SQL语法,如何进行查询、插入、更新和删除操作。
  • Django使用ORM(对象关系映射)与数据库进行交互,虽然可以不直接写SQL,但了解数据库如何工作很有帮助。

5. HTTP/网络基础

  • HTTP协议:理解基本的GET、POST请求以及HTTP状态码。
  • Django作为一个Web框架,处理HTTP请求和响应是核心功能之一。

1. 项目结构:

首先,确保你将项目文件按Django的标准结构进行组织。Django项目的基本结构如下:

myproject/
    ├── myproject/
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py
    │   ├── asgi.py
    │   └── wsgi.py
    ├── myapp/
    │   ├── migrations/
    │   ├── __init__.py
    │   ├── admin.py
    │   ├── apps.py
    │   ├── models.py
    │   ├── views.py
    │   ├── urls.py
    │   └── templates/
    │       ├── about.html
    │       ├── getinformation.html
    │       ├── index.html
    │       ├── welcome.html
    ├── static/
    │   ├── css/
    │   ├── js/
    │   └── images/
    ├── manage.py

2. 在cmd中创建Django项目:

首先,在要创建项目的文件夹运行cmd,输入下面这行命令,创建一个名为myproject的项目文件夹。

django-admin startproject myproject

接着输入下面两行命令,在刚刚创建的项目中创建一个新的Django应用:

cd myproject

python manage.py startapp myapp

2. 1 .在pycharm中创建Django项目:

点这个创建新项目,正常来说,第一次创建的话,pycharm会自动帮你下载Django包到你的本地python环境中。当然也可以手动用pip安装。

3. Django配置:

编辑 myproject/settings.py 文件,将 myapp 添加到 INSTALLED_APPS 列表中,并设置静态文件和模板文件的路径:

INSTALLED_APPS = [
    ...
    'myapp',
]

# 添加静态文件配置
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']

# 添加模板文件配置
TEMPLATES = [
    {
        ...
        'DIRS': [BASE_DIR / 'myapp/templates'],
        ...
    },
]

一些文件和目录的名字是 Django 框架自动生成的,并且在项目初始化或运行时依赖这些名字:

  • manage.py: 项目根目录下的 manage.py 文件是 Django 项目的入口,用于执行各种 Django 管理命令,如启动服务器、创建数据库迁移等。文件名不能更改。

  • __init__.py: 每个 Python 包(目录)下都需要包含这个文件,它可以是空的,但必须存在。它告诉 Python 该目录是一个包。

  • settings.py: 这个文件位于项目的配置文件夹中,是 Django 项目的配置文件。虽然你可以更改它的名字,但需要在 manage.pywsgi.py 等文件中同步更改 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<your_settings>")

  • urls.py: 每个应用通常都有自己的 urls.py 文件,用于定义 URL 路由。如果更改名字,Django 将不会自动加载它。每个应用的 urls.py 文件名应保持不变。

  • wsgi.pyasgi.py: 这两个文件分别用于 WSGI 和 ASGI 服务器部署。如果你要使用 Django 进行服务器部署,默认名字应保持不变,除非你知道如何手动配置这些文件。

4.各个部分功能

1. 项目根目录 (myproject/)

这个根目录包含了项目的全局文件,包括 manage.py 和一个与项目同名的子目录。

manage.py

manage.py 是 Django 的命令行工具,用于执行管理任务,例如运行开发服务器、迁移数据库等。你可以通过运行命令 python manage.py runserver 来启动项目。

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable?"
        ) from exc
    execute_from_command_line(sys.argv)

2. 项目子目录 (myproject/)

这个子目录包含项目的全局配置文件,它的名字通常与项目名相同。它包含 Django 项目的核心配置文件。

__init__.py

这是一个空文件,表明 myproject/ 是一个 Python 包。

settings.py

这是 Django 项目的配置文件,包含数据库设置、静态文件设置、应用程序注册、时区、语言等信息。你会经常修改这个文件。

# settings.py

# 项目安装的应用程序
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',  # 注册自定义应用
]

# 中间件
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

# 数据库设置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

# 静态文件配置
STATIC_URL = '/static/'
urls.py

定义了项目的全局 URL 路由。通过此文件将用户的请求导向不同的应用或视图函数。

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),  # 将主应用的路由包含进来
]
asgi.py

配置项目的 ASGI 入口点,通常用于异步服务器和 WebSocket。

import os
from django.core.asgi import get_asgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_asgi_application()
wsgi.py

配置项目的 WSGI 入口点,通常用于生产环境的部署。

import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_wsgi_application()

3. 应用目录 (myapp/)

这是我们创建的自定义应用,每个应用都是一个功能模块。Django 项目可以包含多个应用,每个应用负责一个独立的功能。

migrations/

这个文件夹保存数据库迁移文件,Django 会在模型变化时自动生成这些文件。

admin.py

用于注册模型,使它们可以在 Django 管理后台进行管理。

from django.contrib import admin
from .models import UserInfo

admin.site.register(UserInfo)  # 将 UserInfo 模型注册到管理后台
apps.py

用于配置应用程序,定义应用的名称等。

from django.apps import AppConfig

class MyappConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'myapp'
models.py

模型文件,定义数据库结构。每个模型类映射到数据库中的一张表。

models.py 文件中,虽然模型的类名和字段名称可以自定义,但有些约定不能更改:

  • 类继承自 models.Model: 你的模型类必须继承自 django.db.models.Model

from django.db import models

class UserInfo(models.Model):
    name = models.CharField(max_length=100)
    student_id = models.CharField(max_length=50, unique=True)
    class_name = models.CharField(max_length=50)
    email = models.EmailField()
    phone = models.CharField(max_length=15)
    message = models.TextField()

    def __str__(self):
        return self.name
  • models.Model 是 Django 的模型基类,不能省略或替换。

  • 字段类型: Django 提供了一系列字段类型(CharField, IntegerField, EmailField 等),这些类型不能任意修改。如果你要保存字符串、整数等数据,必须使用 Django 提供的字段类型。

  • Meta: Meta 类是模型的内部类,可以用于定义一些模型的元数据,如数据库表名、排序等。虽然类名 Meta 可以自定义,但这是 Django 的约定,建议不要修改。如果你要定义元选项,必须用 Meta

  • class UserInfo(models.Model):
        name = models.CharField(max_length=100)
        
        class Meta:
            db_table = 'user_info_table'
    

views.py

视图文件,处理请求并返回响应。视图可以直接返回 HTML 或通过模板返回动态内容。

views.py 中视图函数名或类名可以自定义,但某些地方的名字必须符合 Django 的约定:

  • request 参数: 无论是基于函数的视图还是基于类的视图,第一个参数必须是 request,它是 Django 自动传递的 HttpRequest 对象。不能修改这个参数名,否则视图函数无法正确接收请求数据。

from django.shortcuts import render
from .models import UserInfo

def index(request):
    return render(request, 'myapp/index.html')

def submit_info(request):
    if request.method == 'POST':
        name = request.POST['name']
        student_id = request.POST['student_id']
        class_name = request.POST['class_name']
        email = request.POST['email']
        phone = request.POST['phone']
        message = request.POST['message']
        
        UserInfo.objects.create(
            name=name, student_id=student_id, class_name=class_name,
            email=email, phone=phone, message=message
        )
        return render(request, 'myapp/success.html')
    return render(request, 'myapp/index.html')
视图类继承自 View 或其子类: 如果使用基于类的视图,必须继承 django.views.View 或其子类。类名可以自定义,但继承必须正确:
from django.views import View

class MyView(View):
    def get(self, request):
        return HttpResponse('Hello, World!')
forms.py

用于定义表单字段和验证规则,特别适用于复杂的表单处理。

表单的文件名可以是任意的,但表单类必须继承自 forms.Formforms.ModelForm。此外,表单字段必须使用 Django 提供的字段类型。

  • 表单类继承自 forms.Formforms.ModelForm:

  • from django import forms
    
    class UserInfoForm(forms.ModelForm):
        class Meta:
            model = UserInfo
            fields = ['name', 'email']
    

    Meta: 与模型类似,如果使用 ModelFormMeta 类的名称不可更改。

urls.py

定义应用的 URL 路由。

  • urlpatterns 列表: 这个列表用于存放 URL 模式与视图函数的对应关系,名字必须为 urlpatterns,不能修改,否则 Django 无法找到你的路由。

  • path()re_path(): 路由必须使用 Django 提供的 path()re_path() 函数来定义,不能使用其他方式。

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('submit-info/', views.submit_info, name='submit_info'),
]
templates/

存放 HTML 模板的文件夹。Django 将根据模板生成动态页面。

<!DOCTYPE html>
<html>
<head>
    <title>信息填写</title>
</head>
<body>
    <h1>填写您的信息</h1>
    <form method="POST" action="{% url 'submit_info' %}">
        {% csrf_token %}
        姓名: <input type="text" name="name"><br>
        学号: <input type="text" name="student_id"><br>
        班级: <input type="text" name="class_name"><br>
        邮箱: <input type="email" name="email"><br>
        电话: <input type="text" name="phone"><br>
        留言: <textarea name="message"></textarea><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

4. static/ 目录

static/ 目录用于存放静态文件,例如 CSS、JavaScript 和图片等。静态文件在生产环境中并不会动态生成,而是直接提供给用户的。

css/

这里存放项目的 CSS 文件,用于定义页面的样式。

示例文件:

style.css

body {
    font-family: Arial, sans-serif;
    background-color: #f9f9f9;
}

h1 {
    color: #333;
}

form {
    margin: 20px 0;
}
js/

这里存放 JavaScript 文件,用于增强网页的交互性。

示例文件:

script.js

document.addEventListener("DOMContentLoaded", function() {
    alert("页面加载完毕!");
});

images/

这个文件夹用于存储图片文件,例如 logo、背景图片等。

5. migrations/ 目录

migrations/ 目录是 Django 用来记录模型变更的地方。当你对数据库模型进行修改后,需要生成迁移文件并应用到数据库中。

迁移文件会自动生成,用于保持数据库表结构与模型一致。

示例迁移文件:

0001_initial.py

from django.db import migrations, models

class Migration(migrations.Migration):
    initial = True

    dependencies = []

    operations = [
        migrations.CreateModel(
            name='UserInfo',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=100)),
                ('student_id', models.CharField(max_length=50, unique=True)),
                ('class_name', models.CharField(max_length=50)),
                ('email', models.EmailField(max_length=254)),
                ('phone', models.CharField(max_length=15)),
                ('message', models.TextField()),
            ],
        ),
    ]

6. templates/ 目录

templates/ 目录用于存放模板文件。在 Django 中,模板系统允许开发者将 HTML 代码与动态内容结合,通过视图函数来生成网页。

通常,templates/ 目录是按应用分为多个子目录的。例如,在 myapp/ 应用中,模板文件位于 myapp/templates/myapp/ 下。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>信息填写</title>
    <link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>
    <h1>填写您的信息</h1>
    <form method="POST" action="{% url 'submit_info' %}">
        {% csrf_token %}
        姓名: <input type="text" name="name"><br>
        学号: <input type="text" name="student_id"><br>
        班级: <input type="text" name="class_name"><br>
        邮箱: <input type="email" name="email"><br>
        电话: <input type="text" name="phone"><br>
        留言: <textarea name="message"></textarea><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

7. tests.py

这是 Django 项目中的测试文件,用于编写自动化测试。你可以在这里编写测试来验证应用的功能是否正常工作。

示例代码:

from django.test import TestCase
from .models import UserInfo

class UserInfoTest(TestCase):
    def setUp(self):
        UserInfo.objects.create(
            name="张三", student_id="12345", class_name="2024级", 
            email="zhangsan@example.com", phone="123456789", message="测试留言"
        )

    def test_user_info(self):
        user = UserInfo.objects.get(student_id="12345")
        self.assertEqual(user.name, "张三")
        self.assertEqual(user.email, "zhangsan@example.com")

8. forms.py (可选)

forms.py 用于定义 Django 表单类,便于处理用户提交的数据。虽然可以直接在视图中手动处理表单数据,但通过表单类可以更好地组织代码并进行自动验证。

from django import forms

class UserInfoForm(forms.Form):
    name = forms.CharField(label='姓名', max_length=100)
    student_id = forms.CharField(label='学号', max_length=50)
    class_name = forms.CharField(label='班级', max_length=50)
    email = forms.EmailField(label='邮箱')
    phone = forms.CharField(label='电话', max_length=15)
    message = forms.CharField(label='留言', widget=forms.Textarea)

9. admin.py

用于将模型注册到 Django 管理后台,以便通过 Django 的默认管理界面进行管理。每个注册的模型可以在后台进行增删改查等操作。

admin.site.register(): 用于将模型注册到 Django 的管理后台,admin.site 是 Django 内置的后台站点管理器,必须保持不变。

示例代码:

from django.contrib import admin
from .models import UserInfo

# 注册模型到管理后台
admin.site.register(UserInfo)

10. apps.py

这个文件用于定义 Django 应用程序的配置信息。每个 Django 应用都可以有一个 AppConfig 类,负责定义应用的元数据。

示例代码:

from django.apps import AppConfig

class MyappConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'myapp'

11. urls.py

每个应用可以有自己独立的 URL 路由配置文件,这里定义了视图函数和 URL 的映射关系。项目的全局 urls.py 文件通常会包含应用的 urls.py

示例代码:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('submit-info/', views.submit_info, name='submit_info'),
]

中间件 (MIDDLEWARE)

settings.py 中,MIDDLEWARE 是一个列表,不能更改其名称。并且,如果你使用 Django 内置功能如认证或消息系统,某些中间件必须存在,例如:

  • django.contrib.sessions.middleware.SessionMiddleware: 必须存在于 MIDDLEWARE 中,否则会导致会话处理失败。
  • django.contrib.auth.middleware.AuthenticationMiddleware: 如果要使用认证系统,此中间件必须添加。

通过以上的文件结构,Django 项目实现了前后端分离的模块化开发,每个部分职责清晰,便于管理和扩展。每个应用的目录也独立组织,方便大规模项目的维护。


http://www.kler.cn/a/319371.html

相关文章:

  • MFC工控项目实例二十九主对话框调用子对话框设定参数值
  • INQUIRE:一个包含五百万张自然世界图像,涵盖10,000个不同物种的专为专家级文本到图像检索任务设计的新型基准数据集。
  • 探索Pillow库:Python图像处理的瑞士军刀
  • MacOS 本地生成SSH key并关联Github
  • 【Rust练习】21.动态数组 Vector
  • 单元测试、集成测试、系统测试有什么区别
  • npm install安装缓慢及npm更换源
  • 研究生三年概括
  • 【Linux实践】实验五:用户和组群账户管理
  • 充电宝哪个牌子性价比高?2024年充电宝推荐!7款好用充电宝推荐
  • 计算机毕业设计 校园新闻管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 详细介绍swoole以及其优缺点
  • Spring Boot实战:使用@Import进行业务模块自动化装配
  • 正向科技格雷母线内胆,适应任何糟糕工业环境
  • 828华为云征文 | 使用Flexus X实例搭建Dubbo-Admin服务
  • Elasticsearch 单机和集群环境部署教程
  • QT创建线程,QT多线程的创建和使用,QT线程池
  • 【华为】用策略路由解决双出口运营商问题
  • Git 工作区、暂存区与修改全解析
  • 网络安全证书考取相关知识
  • 【Linux】环境部署kafka集群
  • 工业一体机在汽车零部件工厂ESOP系统中的关键作用
  • 【记录】在返回值类型为BigDecimal情况下末尾小数位为0的会省略不显示
  • linux如何启用ipv6随机地址
  • QT 中的信号与槽机制详解
  • 2:java的介绍与基础2:Scanner