关于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时,是需要搭配Gunicorn或uWSGI才能完成整个http的请求+响应的。

如果没有搭配Gunicorn或uWSGI,而使用以下这个配置的话,实际上是启动了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%" 

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

arguments="gunicorn myproject.wsgi:application --bind 0.0.0.0:%HTTP_PLATFORM_PORT%"

或为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 的比较文章。

启动uwsgi的命令是

#启动 uwsgi 命令
# cd ./mysite/mysite      # uwsgi.ini 配置文件 下执行
uwsgi --ini uwsgi.ini

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/369116.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯备战——13.PCF8591芯片的使用

目录 1.芯片简介2.读写时序3.控制字4.代码封装库5.原理图分析6.使用示例 1.芯片简介 截取自NXP的PCF8591芯片数据手册&#xff0c;我把重点关注部分划出来了&#xff0c;请务必自行阅读一遍数据手册&#xff01; 2.读写时序 ①器件地址&#xff1a; Bit0决定是读还是写操作&…

python打造光斑处理系统7:沿割线的像素灰度分布

文章目录 单角度切割多角度切割绘图 光斑处理&#xff1a;python处理高斯光束的图像 光斑处理系统&#xff1a; 程序框架&#x1f31f;打开图像&#x1f31f;参数对话框/伪彩映射&#x1f31f;裁切ROI光强分布&#x1f31f;高斯拟合 单角度切割 在查看光斑分布时&#xff0c…

【C生万物】初始C语言

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

合并分支rebase和merge的区别

文章目录 一、前言1.1、master分支1.2、dev分支 二、合并2.1、git merge2.2、git rebase 三、总结四、最后 一、前言 实际开发工作的时候&#xff0c;我们都是在自己的分支开发&#xff0c;然后将自己的分合并到主分支&#xff0c;那合并分支用2种操作&#xff0c;这2种操作有…

maven项目管理工具安装和配置

文章目录 1.1 软件下载安装1.1.2 软件安装 1.2 软件配置1.2.1 软件环境配置1.2.2 软件版本测试1.2.3 maven 配置1.2.3.1 仓库配置1.2.3.2 镜像配置1.2.3.3 配置 JDK 1.3 IDEA 结合 Maven 使用 1.1 软件下载安装 首先我们需要去 Maven 官方下载安装软件&#xff0c;本文使用的是…

【深度测试】看到技术方案后,该怎么进行分析和测试

测试左移的思想&#xff0c;讲究尽早测试&#xff0c;测试是一系列的行为&#xff0c;并不一定要等代码运行起来才能测&#xff0c;下面会分享一些经验&#xff0c;提供大家参考。 一、静态分析 1.1 分析方法调用链 目标&#xff1a;梳理结构&#xff0c;化繁为简 原理&#…

Qt多语言翻译

Qt多语言翻译概述 Qt提供了非常简单易用的多语言翻译机制&#xff0c;其核心类为QTranslator.概括来说就是利用Qt的lupdate工具将项目中所有tr函数包裹的字符串提取到.ts文件中&#xff0c;然后使用Qt Linguist由专门的翻译人员对提取的.ts文件进行逐个单词短语的翻译工作. 翻译…

springboot153相亲网站

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

在WORD中设置公式居中编号右对齐设置方式

1 软件环境 Office Microsoft Office LTSC 专业增强版2021 2 最终效果 3 操作步骤 编辑公式&#xff1b;光标定位到公式的最后&#xff08;不是行的最后&#xff09;&#xff1b;输入#编号光标定位在公式最后&#xff08;不是行的最后&#xff09;&#xff0c;按Enter键回车…

【Linux系统 01】Vim工具

目录 一、Vim概述 1. 文件打开方式 2. 模式切换 二、命令模式 1. 移动与跳转 2. 复制与粘贴 3. 剪切与撤销 三、编辑模式 1. 插入 2. 替换 四、末行模式 1. 保存与退出 2. 查找与替换 3. 分屏显示 4. 命令执行 一、Vim概述 1. 文件打开方式 vim 文件路径&#…

【CSS】css获取子元素的父元素,即通过子元素选择父元素(使用CSS伪类 :has() :not() )

这里写目录标题 一、:has获取第一个div获取包含 a.active 的 li获取第二个div 二、:not除了类名为active 的 a,其他的a的字体都为18px <div><h1>标题</h1></div><div><ul><li><a href"#" class"active">测…

Filter与Listener(Java Web)

Filter与Listener(Java Web) 概念&#xff1a;Filter表示过滤器&#xff0c;是JavaWeb三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;权限控制、…

mysql按周统计数据简述

概述 业务中经常会遇到按年月日统计的场景&#xff1b; 但有时会有按周统计的情况&#xff1b; 我一般是用2中方法去解决&#xff1a; 利用mysql的weekday函数。计算出当前日期是一周中的第几天&#xff0c;然后当前日期 - 这个数值&#xff0c;就可以得到当前周的周一的日期…

Python—数据可视化Seaborn大全:参数详解与实战案例全解析【第52篇—python:Seaborn大全】

文章目录 Seaborn库常用绘图详解与实战引言安装与导入一、散点图参数说明实战案例 二、直方图参数说明实战案例 三、线性关系图参数说明实战案例 四、热力图参数说明实战案例 五、分布图参数说明实战案例 六、箱线图参数说明实战案例 七、联合分布图参数说明实战案例 八、小提琴…

钓鱼攻击:深度解析与防范策略

一、引言 在当今的网络世界中&#xff0c;钓鱼攻击已经成为一种日益猖獗的威胁。这种攻击方式利用电子邮件、社交媒体或其他在线平台&#xff0c;伪装成可信赖的来源&#xff0c;诱导受害者点击恶意链接或下载恶意附件&#xff0c;进而窃取个人信息或实施其他恶意行为。本文将…

[SWPUCTF 2021 新生赛]easyupload2.0

一开始我通过cobaltstrike写一个文件上传的木马它不允许上传php文件 我这边写了一句话木马通过burp拦截修改后缀为phtml然后通过蚁剑找flag

centos7安装oracle

1 安装虚拟机 设置4G内存&#xff0c;硬盘40G 2 配置网络环境 2.1配置主机名 # vi /etc/hostname 修改为 oracle2.2 配置IP地址 # vi /etc/sysconfig/network-scripts/ifcfg-ens33 修改 BOOTPROTO"static" ONBOOT"yes" IPADDR192.168.109.110 NETMAS…

政安晨:示例演绎Python的函数与获取帮助的方法

调用函数和定义我们自己的函数&#xff0c;并使用Python内置的文档&#xff0c;是成为一位Pythoner的开始。 通过我的上篇文章&#xff0c;相信您已经看过并使用了print和abs等函数。但是Python还有许多其他函数&#xff0c;并且定义自己的函数是Python编程的重要部分。 在本…

027 方法的定义及调用

方法的定义 方法调用 设计方法的原则 使用场景 想象一下有个场景需要我们不断频繁地去使用某部分特定的代码&#xff0c;我们自然可以通过复制粘贴去完成&#xff0c;但是这样会导致代码又臭又长&#xff0c;大部分是重复的代码&#xff0c;这不利于我们后续的维护&#xff0c;…

一键转换MOV至MP3:轻松删除原视频,释放存储空间!

你是否曾经有一个MOV格式的视频文件&#xff0c;想要提取其中的音频却苦于没有合适的工具&#xff1f;现在&#xff0c;有了我们的全新视频剪辑工具&#xff0c;这个烦恼全部消失&#xff01;我们为你提供一键式解决方案&#xff0c;将MOV视频文件快速转换为MP3音频格式。 首先…