Django的流式响应机制(文件下载)及 Django的模板语言与引擎

在这里插入图片描述
首先是响应类型的分类:
以文件下载为例:

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类或字典类

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Modify_QmQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值