Django笔记
Django是由Python编写的开源Web应用框架,Python+Django+Vue是网站开发与部署的常见组合。
重要的参考资料:
Django教程-菜鸟教程:介绍入门基本知识,内容简洁干练
Django官方文档(中文):优秀的官方百科全书,查找文档的不二之选
- Django3教程-w3cschool
- Django3.1教程-刘江
Part 0 版本与兼容
参考资料:Django版本选择、Python兼容问题及更新时间(长期更新)
选择合适的Django与Python对项目开发至关重要,上面博客详细列举了这方面的问题,在此不做赘述。
基于当前时间(2022.8),我们选择Django3.2+Python3.9进行开发。如果版本(特别是大版本号)不同,可能产生未知的错误。
安装Django:
1
pip install Django==3.2
Part 1 创建Project与APP
考虑到Django项目目录的性质,我们以
/
代表项目容器目录(即最外层目录)
创建Project
1 | django-admin startproject project_name |
project_name替换为项目的名字。
创建APP
1 | python manage.py startapp app_name |
app_name替换为app的名字
测试服务运行
只允许本机连接
1 | python manage.py runserver |
允许其他电脑连接
- 在
settings.py
中设置ALLOWED_HOSTS = ['*']
python manage.py runserver 0.0.0.0:8000
配置settings.py
1 | INSTALLED_APPS = [ |
1 | TEMPLATES = [ |
path()
函数
Django2. 0中可以使用 re_path() 方法来兼容 1.x 版本中的 url() 方法,一些正则表达式的规则也可以通过 re_path() 来实现 。
Part 2
视图——类视图与函数视图
类视图
1 | path(..., ClassView.as_view(), ...) |
函数视图
1 | path(..., function_view, ...) |
写一个简单的处理POST请求的视图
可以参考这篇博客
使用form-data
接收信息并使用JsonResponse
传回
参考:使用formdata在vue和django之间传递文件
笔者在数据库大作业时在Vue+Django的前后端连接上花了大量功夫,在这里简单记录。
一个示例函数如下:
1 |
|
从该示例中可以看出,对发送方式的要求为POST
,获取form-data
传送的信息的方法是形如request.POST.get('user_id')
,传回JsonResponse
形如用一个json
生成一个JsonResponse
对象。注意,这里不要使用HttpResponse
,否则会把传回信息写在Header
中而难以被读取。
Part 3 数据库
参考文章
连接MySQL数据库
这里不介绍MySQL数据库本身的安装与配置(后续会在其他博客更新
如果没咕咕咕的话),本部分只介绍在Django中连接配置好的MySQL数据库。
Step 1 填写/project_name/settings.py
配置文件
1 | DATABASES = { |
Step 2 填写/project_name/__init__.py
初始化文件
通过填写初始化文件,告诉Django使用pymysql模块连接MySQL:
1 | import pymysql |
如果你没有安装过pymysql,需要使用pip或conda或其他工具先行安装
创建表与新增表
创建表
参考博客:Django 模型-菜鸟教程
Step 1 创建APP(应用)
在Django中,要使用模型,必须创建一个app(应用),推荐切换到manage.py
所在目录并使用如下命令创建一个app:
1 | python manage.py satrtapp app_name |
推荐上述方式的具体原因可以参考这篇文档;简单而言,这样做可以充分利用Django提供的可插拔特性,更重要地,你可以因此避免很多无谓的bug(比如难以在settings.py
中的INSTALLED_APPS
中进行正确而合适的配置)。
如果您执意不按照上述操作,那么您也可以在任意目录使用如下命令,但这极不推荐(后续内容都仅基于第一种创建APP的方式)
1 | django-admin startapp app_name |
Step 2 创建表格模型
修改/app_name/models.py
,添加要创建的数据库表类
e.g.
1 | class TableDoc(models.Model): |
在上例中,我们设计了两张表,名字分别为TableDoc
和TablePassage
,并设计了若干列。其中,具体的字段写法可以参考Django文档-模型字段参考。
Step 3 添加INSTALLED_APPS
在/project_name/settings.py
中添加APP配置
e.g.
1 | INSTALLED_APPS = [ |
Step 4 在Django框架中创建表结构
以下指令在项目目录下执行
1 | python manage.py makemigrations # 记录对models.py的改动 |
按照上述流程,预期效果如下:
如果有误操作导致产生了难以解决的问题,在条件允许的情况下重新创建APP是更好的选择
新增表 [待补全]
参考资料:Django更新models数据库结构
根据目前笔者查到的资料,暂时没有比较好且简单的办法能够在不影响数据库已有数据的情况下新增一张表,如果数据规模不大,可以采用如下办法:
Step 1
1 | python manage.py makemigrations --empty app_name |
Step 2
1 | python manage.py makemigrations |
Step 3
1 | python |
此部分未完成,待填坑
增删改查
在Django框架中,对数据库操作提供了良好的封装(相较于pymysql而言),增删改查变得更加OO和python。
接下来的内容中,我们以上文中创建表的例子(TableDoc
, TablePassage
)继续展示。
增
1 | from HangLvDataV2.models import TablePassage |
删
1 | from HangLvDataV2.models import TablePassage |
改
1 | from HangLvDataV2.models import TableDoc |
查
获取全部数据
1 | from HangLvDataV2.models import TableDoc |
按条件获取数据
1 | from HangLvDataV2.models import TableDoc |
Part4 单独运行.py
与调试
在Django中,我们可能会想在上线前写一些简单代码测试运行效果,直接python code_name.py
会报错,以下介绍正确方式。
这里介绍的方法适用于Linux服务器,网络上也有一些介绍PyCharm的设置
Step 1 引入os
, django
, sys
首先寻找项目根目录
1 | import django |
Step 2 引入模型
以数据库模型为例,当我们需要测试/使用模型时,按照Django代码的方式引用即可。
1 | from HangLvDataV2.models import TableDoc |
Step 3 运行与调试
前面两步完成后,即可按照常规的python code_name.py
来运行程序。
Part 5 字段
模型中最重要且唯一必要的是数据库的字段定义。字段在类属性中定义。
字段类型
模型中每一个字段都是某个Field
类的实例,在字段类型参考中可以查找
DateTimeField
- 格式化日期:Django 获取当前时间、以及格式化日期的方法
- 自动更新日期:Django小技巧04: 自动日期时间字段
This is copyright.