from wsgiref.simple_server import make_server #定义服务器调用对象application def application(environ,start_response): """ :param environ: #包含所有客户端的请求信息即上下文请求,application从这个参数中获取客户端请求意图 :param start_response: 一个可调用对象,用于发送http请求状态 :return: [b'Hello World!\n'] #返回可迭代对象 且必须是字节流,Http是面向字节流协议 """ status='200 OK' response_headers=[('Conteny-type','text/plain')] #响应头是一个列表 start_response(status,response_headers) #返回给server之前调用 start_response return [b"Hello World!\n"] #创建WSGI服务器,指定调用application,这里的调用对象也可以是一个类或者实例 httpeserver=make_server('127.0.0.1',8000,application) #处理请求后退出 httpeserver.handle_request()然后在 CMD命令行执行下面的 python python_webtest 命令,注意要在 python_webtest 对应的目录下,然后再使用 curl 命令发送请求进行测试,最终如下所示:
C:\Users\Administrator>curl -i 127.0.0.1:8000 HTTP/1.0 200 OK Date: Thu, 30 Jul 2020 08:41:45 GMT Server: WSGIServer/0.2 CPython/3.7.4 Conteny-type: text/plain Content-Length: 13 Hello World!
sudo pip3 install uwsgi
使用上述命令安装 uWSGI,安装完成后在 BookStore 项目的根目录下,新建 uwsgi.ini 配置文件(和 manage.py 文件同级目录),并在该文件中进行如下配置:[uwsgi] # 套接字方式的 IP地址:端口号 # socket=127.0.0.1:8000 # Http通信方式的 IP地址:端口号 http=127.0.0.1:8000 #上述两种方式选择其一,在使用Nginx需要使用socket # 项目当前工作目录自行配置 chdir=/home/.../.../my_projectname 这里需要换为项目文件夹的绝对路径 # 项目中wsgi.py文件的目录,相对于当前工作目录 wsgi-file=my_project/wsgi.py #是否启动主进程来管理其他进程 master=true # 进程个数,根据电脑配置设置 process=4 # 每个进程的线程个数 threads=2 # 服务的pid记录文件 pidfile=uwsgi.pid # 服务的日志文件位置 daemonize=uwsgi.log然后修改 settings.py 文件将其设置为适合线上生产环境使用,如下所示:
DEBUG=False #关闭调试模式
ALLOWED_HOSTS = ['*'] #任何ip都可以访问
启动 uwsgi 命令 $ cd 项目文件夹 $ sudo uwsgi --ini uwsgi.ini 停止 uwsgi 命令 $ cd 项目文件夹 $ sudo uwsgi --stop uwsgi.pid说明:当 uWSGI 启动后,当前 Django 项目的程序已变成后台守护进程,在关闭当前终端时此进程也不会停止。执行完我启动命令后,可以看到在项目的主目录下又生成了两个文件分别是 uwsgi.pid 与 uwsgi.log,它们分别用来记录,uWsgi 的进程号码 pid 与 uWSGI 的相关运行日志。启动成功的标志如下所示:
[uWSGI] getting INI configuration from uwsgi.ini
此时我们我们在没有使用 runserver 启动的情况下,可以访问 127.0.0.1:8000/admin 进行测试,你会看到,我们成功等了后台界面,如下所示:
图1:测试 uWSGI 访问页面
此时 uWSGI.log 会帮助我们记录 uWSGI 服务器的请求日志等等,有兴趣可以自己看一看日志内容。上述就是 uWSGI 服务器的完整部署与使用流程,不过如果这样使用的话, uWSGI 会直接暴露给客户端用户,所以它通常会和 Nginx 搭配在一起进行使用,在下一节《Django项目部署Nginx安装与配置(完结)》将给大家介绍。
本文链接:http://task.lmcjl.com/news/18426.html