响应流response 响应流下载文件_响应流response


首先是响应类型的分类:

以文件下载为例:

1. 使用HttpResponse类

直接读取文件数据,然后返回值即可:文件内容一次响应,适合用于小文件

响应流response 响应流下载文件_字符串_02


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进行赋值。

响应流response 响应流下载文件_字符串_03


标签

使用{% 关键字引导的逻辑程序 %}
标签中的关键字包括
for, endfor, block, endblock,if, elif, else,endif, in, trans ,as, with, extends等

过滤器
{{name | 过滤条件或者过滤标签 }}
过滤的标签有:lower, escape,linebreaks, date, length等

模板引擎

django的模板引擎在settings.py文件当中有定义:

响应流response 响应流下载文件_字符串_04


模板的查找

函数一、 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类或字典类