您的当前位置:首页正文

django怎么处理请求

2024-07-22 来源:好兔宠物网

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请求与响应(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常用语法,接受get和post参数的方法

4、在app中创建urls.py文件cd ../bookvi urls.py,并写代码如下。5、然后运行django工程cd ..python manage.py runserver 192.168.128.25:8000 ,最后的ip就是填入allowed_host的本机ip,在8000端口上运行。6、然后打开POSTMAN,可以是局域网中任意台电脑,请求方式为POST,网址和body传入参数如下图...

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项目的根目录添加到服务器的主目录中,...

django和tornado哪个好

如果你的项目需要大规模的用户交互和复杂的数据处理,Django可能会是一个好的选择。Tornado则以其异步性能和灵活性著称。Tornado是一个Python Web框架和异步网络库,设计用于长连接和WebSockets等异步操作。它的异步特性使得在高并发场景下表现优异,适用于需要处理大量并发请求的应用。同时,Tornado提供了丰富...

用python的django或者web.py做服务器,性能上有瓶颈吗

确实会有一些性能问题。1.异步 django的http请求是同步的,通过gevent的协程来实现异步就解决了,很快。2.缓存和队列 用ZeroMQ、Memcached来做缓存和队列就解决了。3.影响性能的函数 如果真的有CPU密集型的函数影响性能,可以编译成C来解决性能问题,一些矩阵操作也可以通过numpy来解决 ...