Django 介绍
使用 Django 3.1 进行操作, 虽然已经更新到了 5 版本, 但是没必要追太新, 旧版本学会了后面补一下就可以了
介绍
Django 作为 Python 的一个 Web 框架, 其功能全面而且使用范围广, 采用 MTV 模式
在 Django 开发中使用 APP 模式进行开发, 也就是将功能分成多个 APP 比如 : 登陆APP 、聊天 APP 这类, 我们可以在一个项目中添加多个 APP 进行操作或者在多个项目中引用一个 APP , 这样的操作可以从一定角度简化开发以及便于维护迭代
MVC/MTV 介绍
MVC
百度百科:全名Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件工程典范,用业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
通俗解释:一种代码和文件的组织和管理形式!不要被缩写吓到了,这其实就是把代码分散到不同的文件中,把不同类型的文件又放到不同目录下的一种做法,然后取了个高大上的名字。当然,它带来的好处有很多,比如前后端分离,松耦合等等,在使用中你慢慢体会就会逐渐明白它。
其中:
- 模型(model) : 定义数据库相关的内容,一般放在models.py文件中。
- 视图(view):定义HTML等静态网页文件相关,也就是那些HTML、CSS、JS等前端的东西。
- 控制器(controller):定义业务逻辑相关,就是你的主要代码。
MTV
Django对传统的MVC设计模式进行了修改,将视图分成View模块和Template模块两部分,将动态的逻辑处理与静态的页面展示分离开。而Model采用了ORM技术,将关系型数据库表抽象成面向对象的Python类,将数据库的表操作转换成Python的类操作,避免了编写复杂的SQL语句。
- 模型(model) : 定义数据库相关的内容,一般放在models.py文件中。
- 模板(Template):将模型数据与HTML页面结合起来的引擎
- 视图(View):负责实际的业务逻辑实现
Django的MTV模型组织可参考下图所示:
Django 环境安装&配置&使用
- 常用命令
- 项目目录介绍
$ django-admin.exe startproject projectName # 创建一个 Django 项目
$ python manage.py startapp APPName # 创建一个 APP
$ python manage.py runserver # 启动 Django 项目
$ python manage.py check # 检测 Django 项目的配置等等内容
$ python manage.py createsuperuser # 创建一个 admin 管理账户
$ python manage.py migrate # 遍历 INSTALLED_APPS 中的所有项目, 在数据库中创建对应的表
$ python manage.py makemigrations APPName # 将APPName 模型文件保存为一个 “迁移(migration)”。
如果我们创建一个项目, Django 会帮助我们生成以下文件, 每个文件都有其特殊的作用
(venv) PS C:\Users\14894\Desktop\Github\Programming\Python\Django\learn> tree /f
卷 Windows-SSD 的文件夹 PATH 列表
卷序列号为 2244-FFA1
C:.
│ manage.py # 项目管理脚本
│
└─learn
asgi.py # 一个基于ASGI的web服务 器进入点,提供异步的网络通信功能,通常不用关心。
settings.py # 项目主配置文件
urls.py # 主路由文件, 所有的任务都是从这里开始分配,相当于Django驱动站点的目录。
wsgi.py # 一个基于WSGI的web服务器进入点,提供底层的网络通信功能,通常不用关心。
__init__.py
如果我们创建一个 APP , Django 会帮助我们生成以下文件
(venv) PS C:\Users\14894\Desktop\Github\Programming\Python\Django\learn> tree .\start\ /f
卷 Windows-SSD 的文件夹 PATH 列表
卷序列号为 2244-FFA1
C:\USERS\14894\DESKTOP\GITHUB\PROGRAMMING\PYTHON\DJANGO\LEARN\START
│ admin.py
│ apps.py
│ models.py
│ tests.py
│ views.py
│ __init__.py
│
└─migrations
__init__.py
良好的目录结构是每个应用都应该创建自己的urls、forms、views、models、tests、apps、templates和static,每个templates包含一个与应用同名的子目录,每个static也包含一个与应用同名的子目录。
注意 : Django 的开发服务器具有自动重载的功能, 当你的Python代码有修改,服务器会在一个周期后自动更新, 但是,有一些动作,比如增加文件,不会触发服务器重载,这时就需要你自己手动重启。所以建议,在任何修改代码的操作后,手动重启开发服务器,确保修改被应用。
配置文件的设置
在实际开发中, 有一些设置经常需要改动, 如下所示:
TIME_ZONE = 'Asia/Shanghai' # 时区设置
APP 配置
Django 会根据 INSTALLED_APPS
配置项, 来加载和激活 APP, 因此如果我们创建一个 APP 需要在此进行注册操作
INSTALLED_APPS = [
'django.contrib.admin', # admin管理后台站点
'django.contrib.auth', # 身份认证系统
'django.contrib.contenttypes', # 内容类型框架
'django.contrib.sessions', # 会话框架
'django.contrib.messages', # 消息框架
'django.contrib.staticfiles', # 静态文件管理框架
]
数据库配置
在 Django 中默认使用 SQLite3 数据库, 因为Python原生支持SQLite3数据库, 当然也可以根据自己的需要进行灵活设置, 下面是数据库默认配置
// projectName/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
如果想要修改使用其他数据库, 需要安装对应的数据库操作模块, 并修改文件中 DATABASES
配置内容:
ENGINE
: 数据库的引擎, 比如django.db.backends.sqlite3
、django.db.backends.postgresql
、django.db.backends.mysql
、django.db.backends.oracle
NAME
: 数据库的名称, 类似Mysql数据库管理系统中用于保存项目内容的数据库的名字
- 在使用非 SQLite3 数据库时, 需要先创建对应的数据库, Django 不会帮助我们做着一步工作
- 确保提供的用户在数据库中具有创建数据表的权限
下面将介绍在实际使用中会使用到的命令以及对应的描述信息 (PS : 本例内容来自 第一个 Django 案例), 在案例中创建了 polls
APP 并将其注册到了 Django 项目中, 随后执行下面的命令
(.venv) PS C:\Users\14894\Desktop\Django\oneDjango> py.exe .\manage.py makemigrations polls
Migrations for 'polls':
apps\polls\migrations\0001_initial.py
- Create model Question
- Create model Choice
通过运行 makemigrations
命令, Django 就会检测 polls
APP 的模型文件的修改, 并模型文件的修改保存为一个 迁移(migration)
migrations是Django保存模型修改记录的文件,这些文件保存在磁盘上。在例子中,它就是 polls/migrations/0001_initial.py
,里面 保存的都是人类可读并且可编辑的内容,方便随时手动修改。当上述操作完毕之后, 就可以进行迁移操作将模型体现到数据库具体表中
当我们想要使用 Github 提交项目代码, 如果没有一个中间过程的保存文件(migrations),那么github如何知道以及记录、同步、实施你所进行过的模型修改动作呢?毕竟,github不和数据库直接打交道,也没法和你本地的数据库通信。但是分开之后,你只需要将你的migration文件(例如上面的0001)上传到github,它就会知道一切。
(.venv) PS C:\Users\14894\Desktop\Django\oneDjango> py.exe .\manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, polls, sessions
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 polls.0001_initial... OK
Applying sessions.0001_initial... OK
migrate 命令对所有还未实施的迁移记录进行操作,本质上就是将你对模型的修改体现到数据库中具体的表中。Django通过一张叫做django_migrations
的表,记录并跟踪已经实施的migrate动作,通过对比获得哪些迁移尚未提交。
迁移的功能非常强大,允许你随时修改你的模型,而不需要删除或者新建你的数据库或数据表,在不丢失数据的同时,实时动态更新数据库。
- 在
models.py
中修改模型 - 运行
python manage.py makemigrations
为改动创建迁移记录文件; - 运行
python manage.py migrate
将操作同步到数据库。
同时还存在一些可以扩展的命令, 可以帮助我们进行操作
$ python manage.py sqlmigrate polls 0001 # 展示在执行迁移操作时要执行的 SQL 语句是什么