首先是响应类型的分类:
以文件下载为例:
1. 使用HttpResponse类
直接读取文件数据,然后返回值即可:文件内容一次响应,适合用于小文件
2. 使用StreamingHttpResponse类
- 将文件分段,每次传输一部分,分段大小可调
- 利用python的迭代器产生分段
- 可以是文件,也可以是任何大规模数据响应
如下代码段所示:
def stresp(request):
def down(file_name,chunk_size=512):
with open(file_name) as f:
while True:
c=f.read(chunk_size)
if c:
yield c
else:
break
fname ="msg.txt"
response=StreamingHttpResponse(down(fname))
return response
包含yield语句的函数是一个生成器 (迭代器的一种)
生成器每次产生一个值 (yield语句)函数被冻结,被唤醒后再产生一个值
生成器是一个不断产生值的函数
3. 使用FileHttpResponse类
参考这一篇 图片下载(文章最后) 其中:
- Content-Type用于指定文件类型
- Content-Disposition用于指定下载文件的默认名称
这两者是MIME类型的标准定义
模板语言:指导模板加载数据方式的工具
DTL:Django templates language 模板语言
外部链接。django模板语言详解
模板语言的分类
- 注释 comment
- 变量 variable
- 标签 tags
- 过滤器 filter
注释
注释分为单行注释和多行注释:
{# 这是一条单行注释 #}
{% comment %}
这是多汗注释的第一行
第二行
{% endcomment %}
变量
使用{{变量名}}
定义变量
如果变量本身是字典类型、列表类型或对象.
用.获取元素
如下代码所示:表示对变量name进行赋值。
标签
使用{% 关键字引导的逻辑程序 %}
标签中的关键字包括
for, endfor, block, endblock,if, elif, else,endif, in, trans ,as, with, extends等
过滤器
{{name | 过滤条件或者过滤标签 }}
过滤的标签有:lower, escape,linebreaks, date, length等
模板引擎
django的模板引擎在settings.py文件当中有定义:
模板的查找
函数一、 get_template(template_name)使用这个函数进行查找。
在模板目录列表中,依次查找某个模板,直到找到并返回Template类。如果未找到模板,则抛出TemplateDoesNotExist
异常
函数二、select_template(template_name_list)
与get_ template()
相似 ,依次按照模板列表查找某个模板,直到找到第一个并返回Template类,未找到则抛出TemplateDoesNotExist
异常
模板的渲染
使用Template.render(context, request)
- > HTML字符串
模板对象的. render()方法用于将模板结合内容渲染成HTML字符串
- context:字典类型,用于加载到模板中的内容
- request:HTTP请求
模板的使用的步骤
步骤1 :指定Template:定义一个Template类
步骤2 :进行渲染:通过Context类或字典类