Django之WSGI

本文介绍了WSGI(Web Server Gateway Interface)的概念,它是Python中用于连接Web服务器和应用程序的标准接口。通过WSGI,开发者可以避免直接处理TCP连接和HTTP请求。文章详细阐述了一个Web应用的基本流程,包括浏览器发送HTTP请求,服务器生成HTML响应,以及浏览器接收并显示HTML内容的过程。此外,还提及了`run_server()`函数在处理连接中的作用,但强调它不被直接调用,而是由`make_server`函数自动处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WSGI是什么

        WSGI即是:Web Server Gateway Interface ,服务器网关接口,为了不接触TCP连接和HTTP原生请求等,需要一个统一的接口WSGI,而python提供的模块是wsgiref。

 

一个Web应用的本质就是:

  • 1.浏览器发送一个HTTP请求;
  • 2.服务器收到请求,生成一个HTML文档;
  • 3.服务器把HTML文档作为HTTP响应的Body发送给浏览器;
  • 4.浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。




    
一旦有连接连上,make_server函数创建连接,并且自动调用 run_server()函数,处理连接。
可以发现,run_server()函数没有显式地被调用,也不可以被我们显式调用,应为我们无法传递参数environ和response。
 

#environ:封装了客户端发送的请求内容,
#response:服务端给客户端的回复



from wsgiref.simple_server import make_server

def run_server(environ,response):
    response("200 OK", [("Content-Type","text/html")])    #注意参数是str+tuple
    return ["<h1>Hellow Web!</h1>".encode(encoding="utf-8")]   #数字'1'显示
在部署 Django 项目时,WSGI 无法加载是一个常见问题,可能由多种原因导致。以下是常见的几种情况及其解决方法: 1. **检查 WSGI 配置文件路径** 确保 `wsgi.py` 文件的路径正确,并且 `WSGI_APPLICATION` 指向正确的模块。例如: ```python WSGI_APPLICATION = 'appname.wsgi.application' ``` 其中 `appname` 应替换为实际的应用名称,且该应用目录下应包含 `wsgi.py` 文件 [^1]。 2. **确认环境变量设置** 在 `wsgi.py` 文件中,确保设置了正确的 `DJANGO_SETTINGS_MODULE`,指向项目的配置文件: ```python os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings') ``` 若使用了自定义的配置文件(如生产环境配置),则需要修改为对应的模块名,例如: ```python os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MyBlog.pro_settings') # 使用 pro_settings.py 作为配置文件 [^2] ``` 3. **关闭调试模式并设置 ALLOWED_HOSTS** 当部署到生产环境时,务必关闭调试模式并将允许访问的主机名或 IP 地址添加到 `ALLOWED_HOSTS` 中: ```python DEBUG = False ALLOWED_HOSTS = ["www.youkou.site", "39.108.191.165", "localhost", "127.0.0.1"] ``` 如果遇到页面一直加载的问题,可以暂时将 `ALLOWED_HOSTS` 设置为 `['*']` 进行测试,但正式上线时应限制为具体域名或 IP [^3]。 4. **Apache + mod_wsgi 部署问题排查** 如果使用 Apache 和 `mod_wsgi` 部署,可能会遇到页面一直加载的问题。这通常是因为某些科学计算包无法在 Python 子解释器中正常运行。可以通过强制使用主解释器上下文来解决: ```apache WSGIApplicationGroup %{GLOBAL} ``` 此配置项需添加到 Apache 的虚拟主机配置中,以确保所有请求都在主解释器中执行 [^4]。 5. **检查日志文件** 查看 Apache 或其他 Web 服务器的日志文件,通常可以找到更详细的错误信息,帮助定位问题所在。例如,Django 的 `runserver` 日志、Apache 的 `error.log` 等。 6. **确保依赖库安装正确** 部署环境中必须安装所有必要的 Python 包,并且版本与开发环境一致。建议使用虚拟环境进行管理,避免依赖冲突。 7. **生成迁移文件并应用数据库变更** 在部署前,确保已生成并应用了所有迁移文件: ```bash python manage.py makemigrations python manage.py migrate ``` ### 示例:完整的 `wsgi.py` 配置 ```python import os from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MyBlog.pro_settings') # 使用自定义生产环境配置 application = get_wsgi_application() ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值