Django生产环境部署、测试基类、gunicorn使用(同步)、uvcorn使用(异步)

95 阅读2分钟

单元测试:版本质量评估

单元测试 - 测试用例基类层次

image.png

一个简单的测试用例

image.png

哪些逻辑需要测试?

Django 自带的代码(框架中实现的)逻辑不需要测试 自己写的代码需要测试,比如自定义的页面的访问,自定义的功能菜单

测试用例目录组织

image.png

Django 使用 unittest 模块的内置测试查找机制, 它将在当前工作目录下, 查找任何匹配模式test*.py 命名的文件作为 Test Case。

执行测试用例

# 运行项目下面所有 test 
$python manage.py test 

# 测试指定模块 
$python manage.py test jobs.testcase 

# 测试单个模块中的文件 
$python manage.py test jobs.testcase.test_views 

# 指定类 
$python manage.py test jobs.testcase.test_views.JobTests 

# 测试指定方法 
$python manage.py test jobs.testcase.test_views.JobTests.test_detail

生产环境 Django 配置

静态资源文件的托管环境

  • 静态内容 Web 服务器: Apache/Nginx
  • CDN 服务器

collectstatic 工具:用来收集静态资源文件, settings 中的相关设置

python3 manage.py collectstatic --settings=settings.local

收集完成后,可以将这些静态文件,上传到托管文件的服务器/CDN

  • STATIC_URL: 能够访问到静态文件的 URL 路径。
  • STATIC_ROOT: collectstatic 工具用来保存收集到的项目引用到的任何静态文件的路径 •
  • STATICFILES_DIRS: 这列出了 Django 的 collectstatic 工具应该搜索静态文件的其他目

同步应用

uWSGI

C 实现的 Python Web 容器;

Web 服务器 Apache/Nginx 与 django-uwsgi 进程通信 来提供动态的内容;

gunicorn

纯 Python 实现的高性能 Python 应用容器,无外部依赖,简单容易配置;

还没有遇 到性能问题的时候,推荐使用 gunicorn

异步应用

Daphne: twisted 实现

Hypercorn: 基于 sans-io hyper, h11, h2, wsproto实现

Uvicorn: 基于 uvloop and httptools 实现

Django 的异步支持 Roadmap

  • Django 3.0
      • ASGI Server
  • Django 3.1
      • Async Views
  • Django 3.2/4.0
      • Async ORM

image.png

协程在处理IO时 会释放掉资源 等IO处理完成时 再连接会主任务

gunicorn使用

wangdalei 是我们的项目名称 也是主应用

172.31.7.188 是本机IP

python3 -m pip install gunicorn 

export DJANGO_SETTINGS_MODULE=settings.develop

gunicorn -w 3 -b 172.31.7.188:8000 wangdalei.wsgi:application

image.png

uvcorn 使用

python3 -m pip install uvicorn 

export DJANGO_SETTINGS_MODULE=settings.develop

uvicorn wangdalei.asgi:application --workers 3

image.png