Django中间件是一种可以插入到Django应用程序处理请求和响应的流程中的框架,它允许开发人员在不修改原有代码的情况下,对请求和响应进行额外的处理。
Django中间件的运行机制是:当一个请求到达时,它会被传递到一个叫做“中间件栈”的队列中。这个队列由一系列中间件组成,它们将依次对请求进行处理。在处理完所有中间件之后,请求将被传递到相应的视图函数(Views)。然后,当视图函数生成响应时,它将再次通过中间件栈来处理。
# 例子 def process_request(request): # 对请求进行处理 # Do something with the request return None # 返回None表示不需要修改原始请求 def process_response(request, response): # 对响应进行处理 # Do something with the response return response # 返回response表示不需要修改原始响应
与 HttpResponse
不同,StreamingHttpResponse
没有 content
属性。因此,中间件不能再假设所有响应有 content
属性。如果它们需要访问 content
,它们必须为流式响应进行测试,并且调整其行为:
if response.streaming:
response.streaming_content = wrap_streaming_content(response.streaming_content)
else:
response.content = alter_content(response.content)
注解:streaming_content
被假设为体积太大而无法在内存中保存。响应中间件可以将其包装在一个新的生成器里,但不能使用它。包装通常如下实现:
def wrap_streaming_content(content):
for chunk in content:
yield alter_content(chunk)
处理表单是一件挺复杂的事情。想想看Django的admin,许多不同类型的数据可能需要在一张表单中准备显示,渲染成HTML,使用方便的...
默认情况下,Django 只在会话被修改后才会向会话数据库保存会话——也就是说,是否已经分配或删除了它的任何字典值:# Session i...
Model._default_manager若你使用自定义 Manager 对象,注意 Django 遇到的第一个 Manager (按照你在模型中定义的顺序)...
使用内部 Meta类 来给模型赋予元数据,就像:from django.db import modelsclass Ox(models.Model):horn_length = model...
编写一个简单的表单让我们更新一下在上一个教程中编写的投票详细页面的模板 ("polls/detail.html") ,让它包含一个 HTML form...