关于Django部署

首先了解一下开发环境服务器跟生产环境服务器有何不同。

一、我们通过 python manage.py runserver 启动开发环境服务器,这条命令背后做了哪些事情?

1、首先加载Django项目的设置(settings)

2、检查数据库迁移,确保数据库是最新的,或者提醒开发者关于未应用的迁移。

3、启动开发服务器 :接下来,Django会启动一个轻量级的Web服务器。这个服务器默认监听127.0.0.1:8000地址和端口,但你可以通过命令行参数更改这些设置。

4、监听文件修改并自动重新加载,代码文件修改后,Django会自动重启服务器,这样你就可以立即看到你的更改效果。

5、静态文件和媒体文件的服务:在开发模式下,runserver也会自动服务静态文件(CSS、JavaScript、图片等)和媒体文件,让你不需要配置额外的Web服务器就能测试这些文件的加载和显示。

6、请求处理 :对于进来的HTTP请求,runserver通过Django的WSGI应用来处理。它会根据配置的URL路由将请求分发到相应的视图函数或类视图上,然后返回响应给客户端。

7、输出日志信息:runserver会在控制台输出访问日志和错误信息,这对开发者调试应用非常有用。

我们重点关注3和6(启动开发服务器 和 请求处理),django内置了一个轻量服务器模块: django.core.servers.basehttp。当你运行python manage.py runserver命令时,Django会通过django.core.management.commands.runserver模块创建一个django.core.servers.basehttp.WSGIServer实例,这个实例是 Django 的轻量级 Web 服务器的核心。它接收 HTTP 请求并将其转发给 Django 的 WSGI 应用处理,然后再将响应返回给客户端

二、我们看看生产环境,以Nginx + Gunicorn + Django为例。

这个配置下,整个http请求处理过程中不会 启动django.core.servers.basehttp.WSGIServer

而是会启动Gunicorn服务器:以下是启动Gunicorn服务器的指令。

复制代码
gunicorn myproject.wsgi

默认情况下,Gunicorn会监听127.0.0.1:8000地址

然后就是 客户端 <--->Nginx<--->Gunicorn<--->WSGI<--->你写的脚本

参考这个图:

三、对于IIS+wfastcgi+django

IIS的作用相当于Nginx,

wfastcgi的作用也类似于Gunicorn,都是将HTTP请求转换为WSGI兼容请求,并传递给Django应用,但wfastcgi的功能比Gunicorn少。例如:

Gunicorn 可以监听HTTP请求以及将WSGI应用的响应发送回客户端,而wfastcgi没有自己监听HTTP请求的能力,也不能将response发送给客户端,它是依赖于IIS来接收接收和发送响应的。-->因此,Gunicorn可以独立作为服务器(无需Nginx),但wfastcgi脱离了IIS就无法处理请求和响应。

四、对于 IIS+httpPlatformHandler +django

使用HttpPlatformHandler时,是需要搭配waitress才能完成整个http的请求+响应的。(Gunicorn和uWSGI不支持windows,所以用waitress,waitress的功能比Gunicorn少一点)

如果没有搭配waitress,而使用以下这个配置的话,实际上是启动了Django内置的开发服务器(django.core.servers.basehttp.WSGIServer),所以这个配置并不适用于生产环境。

复制代码
<?xml version="1.0" encoding="UTF-8"?>  
<configuration>  
 <system.webServer>
  <handlers>
    <add name="httpPlatformHandler" path="*" verb="*"
               modules="httpPlatformHandler" resourceType="Unspecified"/>
  </handlers>

  <httpPlatform processPath="D:\home\Python27\python.exe" arguments="manage.py runserver %HTTP_PLATFORM_PORT%" requestTimeout="00:04:00" startupTimeLimit="120" startupRetryCount="3" stdoutLogEnabled="true">
    <environmentVariables>
     <environmentVariable name="PYTHONPATH" value="D:\home\site\wwwroot"/>
    </environmentVariables>
  </httpPlatform>

 </system.webServer>
</configuration>  

若把:

复制代码
arguments="manage.py runserver %HTTP_PLATFORM_PORT%" 

改为waitress就可以用于生产环境了:

复制代码
arguments="run_waitress_server.py"

或为waitress 也可以用于生产环境:

复制代码
arguments="run_waitress_server.py" 

-----------------------------------------------------
# 前提是确保先安装了waitress
pip install waitress



# run_waitress_server.py 的代码如下:

import os
from waitress import serve
from index import app

serve(app,host="0.0.0.0",port=os.environ["PORT"])

waitress 是跟 Gunicorn 同性质的纯python web server,相比之下,waitress 配置更简单但性能弱一些,适合小型项目。网上有不少waitress vs Gunicorn 的比较文章。

相关推荐
用户83562907805111 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
用户83562907805111 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
你好潘先生19 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
Agent_大师20 小时前
WebSocket 行情重连成功,K线缺口不会自动消失
python
荣码20 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
copyer_xyf20 小时前
FastAPI 如何连接 MySQL
后端·python
apocelipes1 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
用户8356290780511 天前
使用 Python 在 PDF 中创建与管理书签
后端·python
MeixianAgent2 天前
Python 回测数据入口怎么验?历史 K 线入库前先做 5 个检查
后端·python
咕白m6252 天前
用 Python 实现一键批量查找与替换 Excel 数据
后端·python