django 框架中的数据流

发布于 更新于
本文目录
  1. 请求和响应
  2. HttpRequest对象
  3. 常用属性
  4. HttpRequest.body
  5. HttpRequest.method
  6. HttpRequest.GET
  7. HttpRequest.POST
  8. HttpRequest.FILES
  9. 请求参数类型
  10. HttpResponse对象
  11. 用法
  12. 传入字符串
  13. 设置头字段
  14. HttpResponse子类
  15. JsonResponse对象
  16. 用法
  17. 序列化非字典对象

技术文章测试开发

django框架是一个web应用框架。本质上它就是处理用户发起的请求,然后返回响应结果。请求,和响应就是框架中的数据流。

请求和响应

django框架是一个web应用框架。本质上它就是处理用户发起的请求,然后返回响应结果。请求,和响应就是框架中的数据流。

当页面被请求时,Django创建一个HttpRequest对象,该对象包含关于请求的元数据。然后Django加载适当的视图,将HttpRequest作为第一个参数传递给视图函数。每个视图负责返回一个HttpResponse对象。

HttpRequest对象

class HttpRequest

HttpRequest类位于 django.http 模块中。

常用属性

HttpRequest.body

原始请求的body,格式是字节类型。

HttpRequest.method

代表请求中使用的http方法的字符串,保证是大写字母。例如

if request.method == 'GET':
    do_something()
elif request.method == 'POST':
    do_something_else()

HttpRequest.GET

一个类似字典的对象,包含所有给定的 HTTP GET 参数(查询参数)。

HttpRequest.POST

一个类似字典的对象,包含所有给定的 表单格式的HTTP POST 参数。

更多属性,请参考官方文档

HttpRequest.FILES

一个类似字典的对象,包含所有上传的文件。

请求参数类型

利用HTTP协议向服务器传参有几种途径?

  1. 查询字符串参数

    • url中?后面的key=value形式的参数

    • 在django中通过request.GET属性获取

  2. 请求体参数

    • post方法的form表单

      • 在django中通过request.POST属性获取

    • json格式和put,patch,delete方法传递的form表单

      • 在django中通过request.body属性获取

    • 文件

      • 上传的文件通过request.FILES属性获取

  3. 路径参数

    • 在django中通过路由规则传递给视图

HttpResponse对象

class HttpResponse

与 Django 自动创建的 HttpRequest对象不同, HttpResponse对象是你的责任。你写的每个视图都要负责实例化、填充和返回一个 HttpResponse 对象。HttpResponse类位于 django.http对象不同, HttpResponse对象是你的责任。你写的每个视图都要负责实例化、填充和返回一个 HttpResponse对象。HttpResponse类位于 django.http 模块中。

用法

传入字符串

典型的用法是将页面的内容以字符串、或字节字符串的形式传递给 [HttpResponse] 构造函数:

>>> from django.http import HttpResponse
>>> response = HttpResponse("Here's the text of the Web page.")
>>> response = HttpResponse("Text only, please.", content_type="text/plain")
>>> response = HttpResponse(b'Bytestrings are also accepted.')

但如果你想增量添加内容,你可以使用 response 作为一个类似文件的对象:

>>> response = HttpResponse()
>>> response.write("<p>Here's the text of the Web page.</p>")
>>> response.write("<p>Here's another paragraph.</p>")

设置头字段

使用HttpResponse.headers设置和删除一个字段。

>>> response = HttpResponse()
>>> response.headers['Age'] = 120
>>> del response.headers['Age']

HttpResponse子类

Django 包含了许多 HttpResponse 的子类来处理不同类型的 HTTP 响应。像 HttpResponse 一样,这些子类位于 django.http 中。

JsonResponse对象

class JsonResponse(data,encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, kwargs)

一个HttpResponse的子类,创建一个JSON编码的响应。其默认的 Content-Type 头设置为 application/json。

第一个参数 data 应该是 dict 实例。如果 safe 参数设置为 False ,它可以是任何 JSON 可序列化的对象。

用法

典型的用法

>>> from django.http import JsonResponse
>>> response = JsonResponse({'foo': 'bar'})
>>> response.content
b'{"foo": "bar"}'

序列化非字典对象

为了对 dict 以外的对象进行序列化,你必须将 safe 参数设置为 False:

>>> response = JsonResponse([1, 2, 3], safe=False)

如果没有传递 safe=False,将引发一个 TypeError。

来源:testingpai

继续阅读