首页 > 其他分享 >django 1.8 官方文档翻译: 6-6-2 如何使用WSGI 部署

django 1.8 官方文档翻译: 6-6-2 如何使用WSGI 部署

时间:2023-04-13 14:35:52浏览次数:49  
标签:WSGI settings 1.8 wsgi Django application 使用 django


如何使用WSGI 部署

Django 首要的部署平台是WSGI,它是Python Web 服务器和应用的标准。

Django 的startproject 管理命名为你设置一个简单的默认WSGI 配置,你可以根据你项目的需要做调整并指定任何与WSGI 兼容的应用服务器使用。

Django 包含以下WSGI 服务器的入门文档:

  • 如何使用Apache 和mod_wsgi 部署Django
  • 从Apache 中利用Django 的用户数据库进行认证
  • 如何使用Gunicorn 部署Django (100%)
  • 如何使用uWSGI 部署Django (100%)

application 对象

使用WSGI 部署的核心概览是application 可调用对象,应用服务器使用它来与你的代码进行交换。在Python 模块中,它通常一个名为application 的对象提供给服务器使用。

startproject 命令创建一个<project_name>/wsgi.py 文件,它就包含这样一个application 可调用对象。

它既可用于Django 的开发服务器,也可以用于线上WSGI 的部署。

WSGI 服务器从它们的配置中获得application 可调用对象的路径。Django 内建的服务器,叫做runserverrunfcgi 命令,是从WSGI_APPLICATION 设置中读取它。默认情况下,它设置为<project_name>.wsgi.application,指向<project_name>/wsgi.py 中的application 可调用对象。

配置settings 模块

当WSGI 服务器加载你的应用时,Django 需要导入settings 模块 —— 这里是你的全部应用定义的地方。

Django 使用DJANGO_SETTINGS_MODULE 环境变量来定位settings 模块。它包含settings 模块的路径,以点分法表示。对于开发环境和线上环境,你可以使用不同的值;这完全取决于你如何组织你的settings。

如果这个变量没有设置,默认的wsgi.py 设置为mysite.settings,其中mysite 为你的项目的名称。这是runserver 如何找到默认的settings 文件的机制。

因为环境变量是进程范围的,当你在同一个进程中运行多个Django 站点时,它将不能工作。使用mod_wsgi 就是这个情况。

为了避免这个问题,可以使用mod_wsgi 的守护进程模式,让每个站点位于它自己的守护进程中,或者在wsgi.py中通过强制使用os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings" 来覆盖这个值。

运用WSGI 中间件

你可以简单地封装application 对象来运用 WSGI 中间件。 例如,你可以在wsgi.py 的底下添加以下这些行:

from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)

如果你结合使用 Django 的application 与另外一个WSGI application 框架,你还可以替换Django WSGI 的application 为一个自定义的WSGI application。

某些第三方的WSGI 中间件在处理完一个请求后不调用响应对象上的close —— most notably Sentry’s error reporting middleware up to version 2.0.7。这些情况下,不会发送request_finished 信号。这可能导致数据库和memcache 服务的空闲连接。

译者:Django 文档协作翻译小组,原文:WSGI servers

本文以 CC BY-NC-SA 3.0 协议发布,转载请保留作者署名和文章出处。

Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。



标签:WSGI,settings,1.8,wsgi,Django,application,使用,django
From: https://blog.51cto.com/wizardforcel/6187985

相关文章

  • django 1.8 官方文档翻译:6-5-1 Django中的测试
    Django中的测试自动化测试对于现代web开发者来说,是非常实用的除错工具。你可以使用一系列测试–测试套件–来解决或者避免大量问题:当你编写新代码的时候,你可以使用测试来验证你的代码是否像预期一样工作。当你重构或者修改旧代码的时候,你可以使用测试来确保你的修改不会在意料之......
  • django 1.8 官方文档翻译:2-5-9 条件表达式
    条件表达式NewinDjango1.8.条件表达式允许你在过滤器、注解、聚合和更新操作中使用if...elif...else的逻辑。条件表达式为表中的每一行计算一系列的条件,并且返回匹配到的结果表达式。条件表达式也可以像其它表达式一样混合和嵌套。条件表达式类我们会在后面的例子中使用下......
  • django 1.8 官方文档翻译: 2-5-7 自定义查找
    自定义查找NewinDjango1.7.Django为过滤提供了大量的内建的查找(例如,exact和icontains)。这篇文档阐述了如何编写自定义查找,以及如何修改现存查找的功能。关于查找的API参考,详见查找API参考。一个简单的查找示例让我们从一个简单的自定义查找开始。我们会编写一个自定义查找ne,提供......
  • django 1.8 官方文档翻译: 2-5-10 数据库函数
    数据库函数NewinDjango1.8.下面记述的类为用户提供了一些方法,来在Django中使用底层数据库提供的函数用于注解、聚合或者过滤器等操作。函数也是表达式,所以可以像聚合函数一样混合使用它们。我们会在每个函数的实例中使用下面的模型:classAuthor(models.Model):name=model......
  • django 1.8 官方文档翻译: 3-3-4 管理文件
    管理文件这篇文档描述了Django为那些用户上传文件准备的文件访问API。底层的API足够通用,你可以使用为其它目的来使用它们。如果你想要处理静态文件(JS,CSS,以及其他),参见管理静态文件(CSS和图像)。通常,Django使用MEDIA_ROOT和MEDIA_URL设置在本地储存文件。下面的例子假设你使用这些默认......
  • Django 对实体的增删改查样例
    classUserInfo(models.Model):"""人员信息"""user_id=models.CharField(max_length=20,primary_key=True,blank=False,verbose_name='人员ID')user_name=models.CharField(max_length=200,blank=Fal......
  • django 配置admin 数据管理,增加数据批量上传下载功能
    在使用django-admin带来直接管理数据库带来的便利的同时,我们希望数据能批量上传,为了达到此目的,我们需要django-admin-export 模块一、安装模块pip3installdjango-import-export-ihttps://mirrors.aliyun.com/pypi/simple/二、settings.py注册模块INSTALLED_APPS=......
  • jdk1.8 LocalDate、LocalTime、LocalDateTime
    LocalDate、LocalTime、LocalDateTime区别LocalDate使用基础使用LocalDate、LocalTime、LocalDateTime区别LocalDate、LocalTime、LocalDateTime是java8对日期、时间提供的新接口。相比于SimpleDateFormat,线程安全。LocalDate用于日期的计算LocalTime用于时刻的......
  • Django自带的Admin后台中如何获取当前登录用户
    需求背景在使用Django快速开发一个IT电脑、显示器资产管理小系统的时候,遇到一个问题是,当变更资产设备(新增、修改、删除)的时候,能记录是谁在什么时间进行的变更。确认的是肯定是登录状态,但是在使用Django的signal中获取不到当前登录的用户问题演示1、定义资产设备模型和 自定义日志......
  • 在django中自动删除超过10天的数据
    需求:比如过期10天的产品自动删除记录posting_date=models.DateTimeField(auto_now_add=True)#purge_old_data.pyfromdjango.core.management.baseimportBaseCommand,CommandErrorfromcus_leads.modelsimportCustomerLeadsfromdatetimeimportdatetime,timedel......