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会启动一个进程与客户端保持长时间的连接,所以会消耗大量的资源。所以如果不是特殊要求,尽量少用这种方法。