Django的生命周期:一次请求的旅程

The lifecycle of a Django request

Posted by Xic on July 31, 2023

引言

Django 是一个非常强大且灵活的Python Web框架。在这篇文章中,我们将探索一次Web请求在Django中的旅程——Django的生命周期。

Django Lifecycle

一、 用户发起请求

用户在浏览器输入URL并发起请求,这个请求可能是GET、POST、PUT、DELETE等不同类型。

二、 WSGI 服务器接收请求

Web服务器接收到用户的HTTP请求后,通过WSGI(Web Server Gateway Interface)将请求转发到Django应用程序。

1
2
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

三、 Django解析请求

接下来,Django的请求解析器开始解析这个HTTP请求,解析出请求的类型、路径等信息。

四、 URL路由

Django使用URLConf模块将解析出的URL与项目中的URL模式进行匹配,以确定应调用哪个视图来处理这个请求。

1
2
3
4
5
6
from django.urls import path
from . import views

urlpatterns = [
    path('example/', views.example_view),
]

五、 Django中间件

在请求到达视图之前,请求还需要经过一系列的中间件。中间件是一种轻量级的插件系统,可以全局改变Django的输入或输出,比如处理会话和身份验证,或者跟踪网站的访问者。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建一个中间件
class SimpleMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # 在视图(以及可能的其他中间件)处理请求之前的代码

        response = self.get_response(request)

        # 在视图(以及可能的其他中间件)处理请求之后的代码
        response['X-Middleware-Test'] = 'hello, godev.me'

        return response
1
2
3
4
5
6
# 将中间件添加到配置列表中,较前的中间件会优先处理请求,并在其他中间件和视图之后处理响应。
MIDDLEWARE = [
    # ...
    'myapp.middleware.SimpleMiddleware',
    # ...
]

六、 视图处理

视图是Django处理请求的核心。每个视图都是一个Python函数(或者类),接收web请求并返回web响应。

1
2
3
4
from django.http import HttpResponse

def example_view(request):
    return HttpResponse("Hello, World!")

七、 模板渲染

视图可能使用Django的模板系统来生成响应。模板系统可以将数据动态地插入到HTML中,生成最终的页面。

1
2
3
4
from django.shortcuts import render

def example_view(request):
    return render(request, 'example.html', {'message': 'Hello, World!'})

八、 返回响应

最后,视图返回一个HTTP响应。这个响应可以是一个HTML页面,也可以是一个重定向,或者是一个404错误,或者任何其他有效的HTTP响应。

九、 异常处理

如果在处理请求的过程中发生了错误,Django有内建的异常处理系统来处理这些错误。例如,如果用户请求的页面不存在,Django将会返回一个404错误。

十、 结论

理解Django的生命周期是我们更深入理解和使用Django的关键。从用户发起请求,到服务器返回响应,每一步都是精心设计,以使我们的Web应用更加高效,强大和灵活。

参考资料

📄Django官方文档
🌍WSGI———维基百科