django 框架中的数据流

本贴最后更新于 718 天前,其中的信息可能已经物是人非

请求和响应

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

回帖
请输入回帖内容 ...