热门搜索 :
考研考公
您的当前位置:首页正文

django怎么处理请求

2024-07-19 来源:伴沃教育

Django 和其他 Web 框架的 Http 处理的流程大致相同,web服务器软件或者模块(wsgiref)会把http 发送的请求封装成了一个 Request 对象, Django 处理一个 Request 的过程首先是通过中间件,然后再通过默认的 URL 方式进行的. 我们可以在中间件(middleware)这个地方把所有 Request 拦截住,用我们自己的方式完成处理以后直接返回 Response.

加载配置

Django 的配置都在 “Project/settings.py” 中定义,可以是 Django 的配置,也可以是自定义的配置,并通过 django.conf.settings 访问,非常方便。

启动

最核心动作的是通过 django.core.management.commands.runfcgi 的 Command 来启动,它运行 django.core.servers.fastcgi 中的 runfastcgi , runfastcgi 使用了 flup 的 WSGIServer 来启动 fastcgi 。而 WSGIServer 中携带了 django.core.handlers.wsgi 的 WSGIHandler 类的一个实例,通过 WSGIHandler 来处理由Web服务器(比如Apache,Nginx等)传过来的请求,此时才是真正进入 Django 的世界

处理 Request

当有 HTTP 请求来时, WSGIHandler 就开始工作了,它从 BaseHandler 继承而来。 WSGIHandler 为每个请求创建一个 WSGIRequest 实例,而 WSGIRequest 是从 http.HttpRequest 继承而来。接下来就开始创建 Response 了。

创建Response

BaseHandler 的 get_response 方法就是根据 request 创建 response , 而 具体生成 response 的动作就是执行 urls.py 中对应的view函数了,这也是 Django可以处理“友好URL”的关键步骤,每个这样的函数都要返回一个 Response 实例。此时一般的做法是通过 loader 加载 template 并生成页面内 容,其中重要的就是通过 ORM 技术从数据库中取出数据,并渲染到 Template 中,从而生成具体的页面了。

处理Response

Django 返回 Response 给 flup , flup 就取出 Response 的内容返回给 Web 服务器,由后者返回给浏览器。

总之, Django 在 fastcgi 中主要做了两件事:处理 Request 和创建 Response , 而它们对应的核心就是“urls分析”、“模板技术”和“ORM技术”。

如图所示,一个 HTTP 请求,首先被转化成一个 HttpRequest 对象,然后该对象被传递给 Request 中间件处理,如果该中间件返回了Response,则直接传递给 Response 中间件做收尾处理。否则的话 Request 中间件将访问 URL 配置,确定哪个 view 来处理,在确定了哪个 view 要执行,但是还没有执行该 view 的时候,系统会把 request 传递给 View 中间件处理器进行处理,如果该中间件返回了Response,那么该 Response 直接被传递给 Response 中间件进行后续处理,否则将执行确定的 View 函数处理并返回 Response,在这个过程中如果引发了异常并抛出,会被 Exception 中间件处理器进行处理。

伴沃教育还为您提供以下相关内容希望对您有帮助:

零基础入手Django(十一):请求与响应

文件上传:通过设置media文件夹和settings.py中的路径,实现文件上传功能。在模板中创建上传表单,提交后可查看文件是否成功上传。HttpResponse对象:关键的响应对象,有多种子类,如HttpResponse()返回字符串,render()渲染模板,redirect()重定向,以及JsonResponse()返回JSON数据。HTTP协议以请求-响应形式工作...

django自学:django中间件基础使用、注册激活、登录鉴权、ajax网络请求...

AJAX请求允许在不刷新页面的情况下与服务器通信。通过设置type为'get'或'post',配合@csrf_exempt装饰器,可以实现静默的AJAX请求。AJAX请求返回的是json格式数据,可以使用json模块或JsonResponse将Python数据转换为json。最后,使用Django处理AJAX提交的表单数据,有多种方式,包括直接获取表单字段值或使用Form...

Django请求与响应(request)与(response)

Django在处理文件上传的时候,文件数据被保存在了request.FILES,FILES中的每个键为中的name 设置文件的存储路径:1.在项目根目录下static中创建media文件夹 2.图片上传后,会被保存到“/static/media/文件”3.打开settings.py文件,增加media_root项 FILES只有在请求的方法为POST 且提交的带有enctype="mu...

web的get请求中一个key有多个值的情况django是怎么处理的

如果用户在your_name域中输入"JohnSmith",同时在多选框中选择了“The Beatles”和“The Zombies”,下面是Django请求对象的内容:>>> request.GET{}>>> request.POST{'your_name': ['John Smith'], 'bands': ['beatles', 'zombies']}>>> request.POST['your_name']'John Smith' >>> requ...

(二)Django REST实践:最简单的REST API实现

在(一)中,我们建立了一个叫做task_platform的Django项目。目录结构如下:进入Django项目目录,并编辑task_platform中的views.py文件。其中:编辑task_platform/urls.py,将我们刚刚实现的API处理函数加入到路由表中。运行Django server:用Postman模拟请求,可以看到:经过练习,我们已经了解如何实现一个简单...

【django 基础】安装 | 创建 | 启动

asgi.py:处理网络请求,通常不需修改。 wsgi.py:同样处理网络请求,一般情况下保持不变。 接着,为了项目模块化,可以创建子应用,如用户管理、订单管理、后台管理等。每个应用包含`admin.py`(默认的后台管理)、`apps.py`(启动类)、`models.py`(数据库模型)、`tests.py`(单元测试)和...

django的异步请求非阻塞是怎么实现的

也就是说,默认情况下你使用./manage.py runserver会开启多个线程对HTTP请求进行伺服,所以第二个请求进来时虽然第一个请求仍在sleep,但已经新开了一个线程进行响应处理,看起来像是“非阻塞”的工作模式,其实质是多线程而非单线程,想禁用这一行为也已经给出了答案,加上--nothreading参数:./manage...

django 并发请求 是多线程吗

用Django搭了个环境,创建了一个App。我想要测试假如同时多个请求进来Django的处理方式,于是写了一下代码在View.py中:Python code?def archive(request):print("start")time.sleep(5)print("end")return HttpResponse("Hellow World")

django 一个请求对应一个进程

uwsgi部署方式下,一个请求会进一个进程,但一个进程同时"接待"的不止一个请求。

如何把Django项目部署到本地服务器上?

pip install django 3. 创建Django项目:在终端中创建一个新的Django项目,例如:django-admin startproject myproject 4. 配置服务器:您需要配置本地服务器以运行Django项目。您可以使用Apache或Nginx作为Web服务器,并配置它们以处理Django项目的请求。您需要将Django项目的根目录添加到服务器的主目录中,...

Top