django入门与实践教程.PDF,django笔记
学习笔记,仅供参考,有错必纠
参考自:Django打造大型企业官网黄y;
文章目录战斗支援车文件生成小的战斗支援车文件将` csv 文件定义成模板生成大的战斗支援车文件StreamingHttpResponse类
战斗支援车文件
生成小的战斗支援车文件
首先,我们在项目文件夹的views.py文件中,定义一个视图函数:
导入战斗支援车
从django.http导入HttpResponse
定义csv_view(请求):
response=http响应(content _ type= text/CSV )
#初始化HttpResponse的时候,指定内容类型为文本/csv
响应[内容处置]=附件;filename=somefilename.csv
#在反应中添加一个内容-处置头
#附件:浏览器将不会对这个文件进行显示,而是作为附件的形式下载
#filename=somefilename.csv :指定这个战斗支援车文件的名字
writer=csv.writer(响应)
#使用战斗支援车模块的作者方法,将相应的数据写入到反应中
writer.writerow([用户名,年龄,身高,体重])
writer.writerow([黄, 19 , 30 , 12])
返回响应
在主urls.py文件中,我们添加路由:
来自姜戈. contrib导入管理
从django.urls导入路径
从。导入视图
从django.conf.urls导入包括
urlpatterns=[
路径( admin/,admin.site.urls),
路径( csv_view/,views.csv_view,name=csv_view ),
]
向http://127.0.0.1:8000/csv_view发起请求,某个文件名。战斗支援车文件被下载:
打开该文件:
将战斗支援车文件定义成模板
我们还可以将战斗支援车格式的文件定义成模板,然后使用姜戈内置的模板系统,并给这个模板传入一个语境对象,这样模板系统就会根据传入的语境对象,生成具体的战斗支援车文件。
首先,我们定义一个模板文件下载。html:
{% for row in rows %} {{ row.0 }},{{ row.1 }}
{% endfor %}
在views.py文件中定义一个视图函数:
定义csv_view(请求):
response=http响应(content _ type= text/CSV )
响应[内容处置]=附件;filename=somefilename.csv
上下文={
行:[
[用户名,年龄],
[《黄》,19]
]
}
模板=加载器。get _ template("下载。html”)
csv _模板=template.render(上下文)
response.content=csv _模板
返回响应
向http://127.0.0.1:8000/csv_view发起请求,打开下载后的战斗支援车文件:
生成大的战斗支援车文件
我们可以借助StreamingHttpResponse对象,这个对象是将响应的数据作为一个流返回给客户端,而不是作为一个整体返回。
首先,我们在views.py文件中添加视图函数:
def large_csv_view(请求):
response=StreamingHttpResponse(content _ type= text/CSV )
响应[内容处置]=附件;filename=largeFile.csv
rows=(Row {},Value {}\n .范围(0,100)中的行的格式(排,排))
response .串流内容=行
返回响应
定义主urls.py文件:
来自姜戈. contrib导入管理
从django.urls导入路径
从。导入视图
从django.conf.urls导入包括
urlpatterns=[
路径( admin/,admin.site.urls),
path(,views.index,name=index ),
路径( csv_view/,views.csv_view,name=csv_view ),
path(large_csv_view/,views.large_csv_view,name=large_csv_view ),
]向http://127 .0 .0 .1:8000/large _ CSV _ view发起请求,largeFile.csv文件被下载:
StreamingHttpResponse类
这个类是专门用来处理流数据的。使得在处理一些大型文件的时候,不会因为服务器处理时间过长而到时连接超时。这个类不是继承自HttpResponse并且跟HttpResponse对比有以下几点区别:
该类没有属性内容,但有streaming_content。该类的streaming_content必须是可以迭代的对象。这个类没有写方法。如果你写数据到这个类的对象,你会得到一个错误。注意:StreamingHttpResponse会启动一个进程与客户端保持长时间的连接,所以会消耗大量的资源。所以如果不是特殊要求,尽量少用这种方法。
转载请联系作者获得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。