Django框架进阶
Django的URL路由机制
URL -> 定义、转换、传参、命名等 -> views
Django的URL路由配置
路由是关联URL及其处理函数关系的过程
settings.py文件中ROOT_URLCONF变量指定全局路由文件名称
1 | ROOT_URLCONF = '<工程名称>.urls' # 默认对应工程目录下urls.py文件 |
Django使用urlpatterns 变量表示路由 (urls.py),该变量是列表类型,由 path() 或 re_path() 作为元素组成
1 | urlpatterns = [ |
Django的URL路由流程
路由是关联URL及其处理函数关系的过程
- (1) Django查找全局 urlpatterns 变量 (urls.py)
- (2) Django按照先后顺序,对URL逐一匹配urlpatterns每个元素
- (3) 在找到第一个匹配时,停止查找,根据匹配结果执行对应处理函数
- (4) 如果没有找到匹配或出现异常,Django进行错误处理
注意:
- Django的路由不考虑HTTP请求方式,仅根据URL进行路由,即,
- 只要URL相同,无论POST、GET等哪种请求方式都指向同一个操作函数
路由:path() 和 re_path()
Django的视图响应类型
视图函数编写原则
视图函数接受HTTP请求并返回响应,可以放在任何地方,可以是任何功能
- 视图函数可以返回Web文本、页面、重定向、错误、图片等任何内容
- 视图函数通过HttpResponse、JsonResponse等类表达并返回响应
- 按约定,视图函数放在对应app中的views.py文件中
Django的响应类型
django.http包含所有响应类型
- HttpResponse类及子类 (共10个)
- JsonResponse类
- StreamingHttpResponse类
- FileResponse类
修改cloudms:
HttpResponse类:
1 | from django.contrib import admin |
1 | def homeproc(request): |
1 | def homeproc(request): |
JsonResponse类
1 | def homeproc1(request): |
StreamingHttpResponse类
FileResponse类
1 | def homeproc2(request): |
Django请求类型的判断
django.views.decorators.http
- 路由不能判断HTTP请求的类型
- Django通过decorators在视图函数前进行基本判断,
1 | from django.views.decorators.http import require_http_methods |
Django的视图流式响应机制
实例:文件下载
HttpResponse方式
1 | def file_download(request): |
文件内容一次性响应,仅适合小文件
StreamingHttpResponse方式
- 将文件分段,每次传输一部分,分段大小可调
- 利用Python的迭代器产生分段
- 可以是文件,也可以是任何大规模数据响应
1 | from django.http import StreamingHttpResponse |
FileResponse方式
- FileResponse是StreamingHttpResponse的子类
- 自动分段、自动迭代,适合二进制文件传输
1 | def homeproc2(request): |
MIME标记
Django的模板引擎与模板使用
Django的模板引擎
模板引擎是模板响应的后端
模板引擎的配置
settings.py文件中对模板引擎进行配置 (BACKEND)
模板目录在列表中的顺序是搜索模板的顺序
Django模板语言入门
模板语言:指导模板加载数据方式的工具
DTL: Django Template Language