开发环境:
Microsoft Windows 10 Enterprise LTSC [Version 10.0.19044.1586], locale zh-CN
Python 3.8.10
PyCharm 2021.2 (Professional Edition)
Visual Studio Code, 64-bit edition (version 1.67.2)
在项目内创建应用 在项目文件夹中按住键盘的 Shift
, 点鼠标 右键
, 选择 在此处打开PowerShell窗口
创建应用的命令: python manage.py startapp <应用名称>
1 2 (venv) PS D:\PycharmProjects\myproject> python .\manage.py startapp department (venv) PS D:\PycharmProjects\myproject>
添加 users
应用后的项目结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 -- myproject |-- manage.py |-- myproject | |-- __init__.py | |-- __pycache__ | |-- asgi.py | |-- settings.py | |-- urls.py | `-- wsgi.py |-- templates |-- department 新创建的应用名称 | |-- __init__.py 包初始化文件 | |-- admin.py django内置的应用程序Django Admin的配置文件 | |-- apps.py 应用程序本身的配置文件 | |-- migrations 数据迁移文件夹 | |-- models.py 数据库模型类文件 | |-- tests.py 单元测试文件 | `-- views.py 视图文件 `-- venv
配置项目用于 启用
新创建的应用 打开 myproject/settings.py
文件, 找到 INSTALLED_APPS
变量, 将新应用添加到 INSTALLED_APPS
变量的应用列表中(以下方法 二选一
):
使用 应用名称
安装应用到项目中
1 2 3 4 5 6 7 8 9 10 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'department', # 通过 应用名 安装应用, 适用于大多数情况 ]
使用 应用的配置文件
安装应用到项目中
1 2 3 4 5 6 7 8 9 10 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'department.apps.UsersConfig', # 通过应用的配置文件安装应用, 适用于 新应用有自定义的配置信息 ]
每个 应用(app)
也有自己的 配置信息
,放在 apps.py
里的。在大多数情况下,把 app名
直接加入到 INSTALLED_APPS
就足够了。只有当你需要给 app自定义配置
信息时,需要把加入 应用(app)
对应的 AppConfig子类
路径直接加入到 INSTALLED_APPS
添加到 INSTALLED_APPS
变量列表中的应用才能实现 数据迁移
为新应用添加一个视图 打开 department/views.py
文件, 编辑内容如下:
1 2 3 4 5 6 from django.shortcuts import renderfrom django.http import HttpResponsedef index (request ): return HttpResponse('Hello, World!' )
管理新应用的路由(url) 在 department
文件夹添加名为 urls.py
的 Python File
, 编辑内容如下:
1 2 3 4 5 6 from django.urls import pathfrom . import viewsurlpatterns = [ path('' , views.index, name='index' ), ]
注册新应用的路由到项目中 打开 myproject/urls.py
文件, 编辑内容如下:
1 2 3 4 5 6 7 8 9 10 from django.contrib import adminfrom django.urls import path, include urlpatterns = [ path('admin/' , admin.site.urls), path('department/' , include('department.urls' )), ]
显示视图的运行结果 在浏览器的地址栏输入URL: http://127.0.0.1:8000/department/
使用模型(Model
) Django
通过内置的 ORM
实现对数据库的操作, 每个模型类对应于数据库中的一个表
定义 组织结构
模型类 打开 department/models.py
文件, 编辑内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 from django.db import modelsclass Department (models.Model): """ 组织架构:用于保存有关联业务的其他公司 或 单位内部的部门信息 """ type_choices = (('firm' , '公司' ), ('department' , '部门' )) title = models.CharField(max_length=60 , verbose_name="名称" ) type = models.CharField(max_length=20 , choices=type_choices, default='department' , verbose_name='类型' ) description = models.CharField(max_length=200 , null=True , blank=True , verbose_name='描述' ) parent = models.ForeignKey('self' , null=True , blank=True , verbose_name='上级部门' , on_delete=models.CASCADE) class Meta : verbose_name = '组织构架' verbose_name_plural = verbose_name def __str__ (self ): """ 返回对象的描述信息 """ return self .title
所有模型都是django.db.models.Model
类的子类。每个类将被转换为 数据库表
。每个字段由 django.db.models.Field
子类(内置在Django core
)的实例表示, 它们并将被转换为数据库的列
字段 CharField
, DateTimeField
等,都是 django.db.models.Field
的子类,包含在Django core
里面, 随时可以使用
CharField
必须设定一个 max_length
ForeignKey
引用它关联的模型(数据库外键), 在新版 Django
中, ForeignKey
必须包含 on_delete
属性
不包含 blank=True
属性的为 必填字段
迁移模型 迁移模型是告诉 Django
通过模型类来创建对应的数据库表
, 以便可以使用数据库来存储数据
到 manage.py
文件所在的文件夹 打开PowerShell窗口
, 激活虚拟环境, 执行命令:python manage.py makemigrations
1 2 3 4 (venv) PS D:\PycharmProjects\myproject> python .\manage.py makemigrations Migrations for 'department' : department\migrations\0001_initial.py - Create model Structure
命令执行完毕后, 会生成文件 department\migrations\0001_initial.py
, 它代表了应用程序模型的当前状态
将生成的迁移文件应用到数据库 继续执行命令: python manage.py migrate
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 (venv) PS D:\PycharmProjects\myproject> python .\manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions, department Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying sessions.0001_initial... OK Applying department.0001_initial... OK
执行迁移数据库操作的时候, 会处理 INSTALLED_APPS
变量中的所有应用的 模型类
, 所以除了上面的自下定义模型, 生成的数据库表也包含了项目自带的其他数据表。而 没有添加
到 INSTALLED_APPS
变量中的应用, 将 不会
被处理。
查看迁移后生成的数据库 打开 MySQL 数据库客户端, 选择当前项目使用的数据库, 查看生成的数据表, 如下图所示:
修改数据库 当模型类修改后,则数据库与模型类不再匹配,此时需要重新执行以下两个命令, 生成修改后的迁移文件以及应用到数据库即可。
python manage.py makemigrations
python manage.py migrate
如果模型类的修改比较大, 并且数据库中对应的表已经保存的数据, 以上两个命令执行后可能会出现异常, 可以直接在MySQL
数据库的 客户端
中删除数据库, 然后重建 同名数据库
, 再执行以上两个命令
使用内置的后台管理功能 Django
已经配置了 Django Admin
, 添加 超级管理员
用户并配置 Django Admin
, 就可以用来维护应用程序了
创建超级用户 执行命令: python manage.py createsuperuser
1 2 3 4 5 6 (venv) PS D:\PycharmProjects\myproject> python .\manage.py createsuperuser 用户名 (leave blank to use 'laohoo' ): admin 电子邮件地址: admin@163.com Password: Password (again): Superuser created successfully.
按命令执行后的提示分别输入用户名
, 电子邮箱
, 密码
和 确认密码
。 其中 密码
有复杂度的要求
管理员登录 在浏览器中打开URL:http://127.0.0.1:8000/admin/
输入用户名
和密码
登录到管理界面
添加模型到管理界面 打开 department/admin.py
文件,并添加以下代码:
1 2 3 4 5 from django.contrib import adminfrom .models import Departmentadmin.site.register(Department)
刷新网页
添加新的组织架构(部门)
添加成功
定制后台管理界面 Django
允许对后台管理界面显示的模型数据进行定制
打开 department/admin.py
文件, 修改如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from django.contrib import adminfrom .models import Departmentclass DepartmentAdmin (admin.ModelAdmin): list_display = ('title' , 'type' , 'description' ,) list_filter = ('title' , 'type' ,) search_fields = ('title' , 'description' ,) ordering = ['title' ] admin.site.register(Department, DepartmentAdmin)
保存文件后,刷新网页,即可看到定制后的管理界面显示效果
参考资料:
Django v4.0 中文文档
Django入门与实践教程
Bootstrap5 中文手册
===END===