Django的URL路由机制
settings.py文件中ROOT_URLCONF变量指定全局路由文件名称。Django使用urlpatterns变量表示路由(urls.py), 该变量是列表类型,其中的元素由path() 或 re_path()组成。path(url字符串,view处理函数),re_path(正则表示式,view处理函数)
settings.py
ROOT_URLCONF = 'mysite.urls' # 默认对应工程目录下url.py文件
urls.py
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
Django的URL路由流程
Django查找全局的 urlpatterns 变量 (urls.py) >>> 按照先后顺序对URL逐一匹配 urlpatterns 每个元素 >>> 找到第一个匹配时停止查找,根据匹配结果执行对应处理函数 >>> 如果没有找到匹配或出现异常,Django进行错误处理
路由函数 path() 解析
path(route,view,kwargs=None,name=None)
route: URL或URL模式,Django定义的URL转换语法
view: 处理(视图)函数的名称,或使用 include()
kwargs: 向处理函数提供的额外参数,以字典形式表示
name: 给url模式的命名
urlpatterns = [
path('polls/2021/', include('polls.urls')), # 精确字符串格式 polls/2021
path('admin/<int:year>/', admin.site.urls), # Django的转换格式 <类型.变量名> admin/<int:year>/ 主要用于处理函数的参数传递,即 admin.site.urls(year= )
path('polls/(?<year>[0-9]{4}/',include('helloapp.urls')) #正则表达式格式 polls/(正则表达式)/
]
Django 的视图响应类型
视图函数一般放在对应app中的views.py文件中,视图函数接受HTTP请求并返回响应,视图函数可以返回Web文本,页面,重定向,错误,图片等任何内容,视图函数通过 HttpResponse, JsonResponse 等类表达并返回响应。Django的响应类型主要有 HttpResponse类及子类(共10个),JsonResponse类,StreamingHttpResponse类,FileResponse类
HttpResponse(content,content_type=None,status=200,charset=None)类
content: 拟返回的字符串
content_type:MIME格式的返回内容
status: 响应状态码
charset: 响应的字符
视图流式响应类型
HttpResponse类及子类 , JsonResponse类 为一次性响应类。StreamingHttpResponse类主要用于大文本文件传输,FileResponse类主要用于大二进制文件传输,这两类为流式响应类。以文件下载举例:
# HttpResponse 方式 文件内容一次性响应,仅适合小文件
def file_download(request):
# do something...
with open('data.txt') as f:
c = f.read()
return HttpResponse(c)
# StreamingHttpResponse 方式 利用python的迭代器产生分段
from django.http import StreamingHttpResponse
def big_file_download(request):
# do something
def file_iterator(file_name,chunk_size=64):
with open(file_name) as f:
while True:
c = f.read(chunk_size)
if c:
yield c
else:
break
fname = "data.txt"
response = StreamingHttpResponse(file_iterator(fname))
return response
Django的模板引擎与模板使用
views.py
def program(request):
template = Template("<h1>这个程序的名字是{{ name }}<h1>")
context = Context("name":"测试平台")
return HttpResponse(template.render(context))
Django 模板语言入门
主要分为注释 comment 变量 variable 标签 tags 过滤器 filter
注释: {# 这是单行注释 #} {% comment %} 这是多行注释 {% endcomment %}
变量: {{ name }} 如果变量本身是字典类型、列表类型或对象,用 . 获取元素 {{ adict.key }} {{ alist.0 }} {{ aobject.attribute }}
标签:{% 关键字引导的程序逻辑 %} 标签中的关键字包括 for, endfor, block, endblock, if, elif, else, endif, in, trans, as, with, extends 等。
过滤器: {% name|过滤标签 %} {% name|f1|f1 %} 过滤器对变量的值进行修饰 lower, escape, linebreaks,date, length等。