关于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时,是需要搭配waitress才能完成整个http的请求+响应的。(Gunicorn和uWSGI不支持windows,所以用waitress,waitress的功能比Gunicorn少一点)

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

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

arguments="run_waitress_server.py"

或为waitress 也可以用于生产环境:

arguments="run_waitress_server.py" -----------------------------------------------------
# 前提是确保先安装了waitress
pip install waitress# run_waitress_server.py 的代码如下:import os
from waitress import serve
from index import appserve(app,host="0.0.0.0",port=os.environ["PORT"])

waitress 是跟 Gunicorn 同性质的纯python web server,相比之下,waitress 配置更简单但性能弱一些,适合小型项目。网上有不少waitress vs Gunicorn 的比较文章。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地缓存Ehcache的应用实践 | 京东云技术团队

java本地缓存包含多个框架&#xff0c;其中常用的包括&#xff1a;Caffeine、Guava Cache和Ehcache&#xff0c; 其中Caffeine号称本地缓存之王&#xff0c;也是近年来被众多程序员推崇的缓存框架&#xff0c;同时也是SpringBoot内置的本地缓存实现。但是除了Caffeine之外&…

Cocos creator 3.x 刚体组件碰撞无效

Cocos creator 3.x 刚体组件碰撞无效 问题描述&#xff1a;只有一个circleCollider2D时&#xff0c;可以在碰撞时正确输出结果&#xff0c;但是当我在外围加了一个circle之后&#xff0c;期望character进入圆圈范围时就触发方法&#xff0c;此时原代码失效 import { _decorat…

Kubernetes基础(十四)-k8s网络通信

1 k8s网络类型 2 Pod网络 2.1 同一pod内不同容器通信 Pod是Kubernetes中最小的可部署单元&#xff0c;它是一个或多个紧密关联的容器的组合&#xff0c;这些容器共享同一个网络命名空间和存储卷&#xff0c;因此Pod中的所有容器都共享相同的网络命名空间和IP地址——PodIP&a…

JVM 性能调优 - 四种引用(4)

为什么会有四种引用 我们先回顾下在 Java 虚拟机内存体系(1) 中提到了的垃圾回收算法 1、引用计数法 原理:给对象添加一个引用计数器,每当有一个地方引用它,计数器的值就加一。每当有一个引用失效,计数器的值就减一。当计数器值为零时,这个对象被认为没有其他对象引用,…

【Java安全】ysoserial-URLDNS链分析

前言 Java安全中经常会提到反序列化&#xff0c;一个将Java对象转换为字节序列传输&#xff08;或保存&#xff09;并在接收字节序列后反序列化为Java对象的机制&#xff0c;在传输&#xff08;或保存&#xff09;的过程中&#xff0c;恶意攻击者能够将传输的字节序列替换为恶…

24.云原生ArgoCD高级之钩子

云原生专栏大纲 文章目录 Argo CD钩子如何定义钩子钩子删除策略 Argo CD钩子 Argo CD 是一个用于部署和管理 Kubernetes 应用程序的工具&#xff0c;它提供了一种声明式的方式来定义和自动化应用程序的部署过程。Argo CD 钩子&#xff08;Hooks&#xff09;是一种机制&#x…

ctfshow-web11~20-WP

web11 根据提示,查询对ctfshow域名进行dns查询,查看TXT记录 阿里云查询链接:阿里云网站运维检测平台 获取flag成功 web12 根据题目提示,我们访问robots.txt,获取到后台地址 然后我们访问一下后台

SQL--DQL

DQL英文全称是Data Query Language(数据查询语言)&#xff0c;数据查询语言&#xff0c;用来查询数据库中表的记 录。 查询关键字: SELECT 在一个正常的业务系统中&#xff0c;查询操作的频次是要远高于增删改的&#xff0c;当我们去访问企业官网、电商网站&#xff0c; 在这…

Linux内核与驱动面试经典“小”问题集锦(4)

接前一篇文章&#xff1a;Linux内核与驱动面试经典“小”问题集锦&#xff08;3&#xff09; 问题5 问&#xff1a;Linux内核中内存分配都有哪些方式&#xff1f;它们之间的使用场景都是什么&#xff1f; 备注&#xff1a;这个问题是笔者近期参加蔚来面试时遇到的一个问题。这…

Maven构建OSGI+HttpServer应用

Maven构建OSGIHttpServer应用 官网&#xff08;https://eclipse.dev/equinox/server/http_in_equinox.php&#xff09;介绍有两种方式&#xff1a; 一种是基于”org.eclipse.equinox.http”包的轻量级实现&#xff0c;另一种是基于”org.eclipse.equinox.http.jetty”包&#…

『 C++ - STL 』unordered_xxx系列关联式容器及其封装(万字)

文章目录 &#x1f3a1; unordered系列关联式容器&#x1f3a1; 哈希表的改造&#x1f3a2; 节点的设置与总体框架&#x1f3a2; 迭代器的封装&#x1f3a0; 迭代器的框架&#x1f3a0; operator()运算符重载&#x1f3a0; 其余成员函数/运算符重载 &#x1f3a2; 迭代器begin(…

ORM模型类

模型 创建两个表 创建模型类 from django.db import models# Create your models here. class BookInfo(models.Model):name models.CharField(max_length10, uniqueTrue) # 书名pub_date models.DateField(nullTrue) # 发布时间read_count models.IntegerField(default…

【TCP/IP】用户访问一个购物网站时TCP/IP五层参考模型中每一层的功能

当用户访问一个购物网站时&#xff0c;网络上的每一层都会涉及不同的协议&#xff0c;具体网络模型如下图所示。 以下是每个网络层及其相关的协议示例&#xff1a; 物理层&#xff1a;负责将比特流传输到物理媒介上&#xff0c;例如电缆或无线信号。所以在物理层&#xff0c;可…

ElastAlert 错误日志告警

文章目录 前言一、ElastAlert 概览1.1 简介1.2 ElastAlert 特性 二、ElastAlert 下载部署2.1 安装 Python3 环境2.2 下载 ElastAlert2.3 部署 ElastAlert 三、接入平台3.1 对外接口层3.2 服务层 前言 ElastAlert 是 Yelp 公司基于 python 开发的 ELK 日志告警插件&#xff0c;…

vue electron应用调exe程序

描述 用Python写了一个本地服务编译成exe程序&#xff0c;在electron程序启动后&#xff0c;自动执行exe程序 实现 1. 使用node的child_process模块可以执行windows执行&#xff0c;通过指令调exe程序 // electron/index.js var cp require("child_process"); /…

C++泛编程(3)

类模板基础 1.类模板的基本概念2.类模板的分文件编写3.类模板的嵌套 在往节内容中&#xff0c;我们详细介绍了函数模板&#xff0c;这节开始我们就来聊一聊类模板。C中&#xff0c;类的细节远比函数多&#xff0c;所以这个专题也会更复杂。 1.类模板的基本概念 和函数模板一样…

AES算法:数据传输的安全保障

在当今数字化时代&#xff0c;数据安全成为了一个非常重要的问题。随着互联网的普及和信息技术的发展&#xff0c;我们需要一种可靠的加密算法来保护我们的敏感数据。Advanced Encryption Standard&#xff08;AES&#xff09;算法应运而生。本文将介绍AES算法的优缺点、解决了…

【调试】pstore原理和使用方法总结

什么是pstore pstore最初是用于系统发生oops或panic时&#xff0c;自动保存内核log buffer中的日志。不过在当前内核版本中&#xff0c;其已经支持了更多的功能&#xff0c;如保存console日志、ftrace消息和用户空间日志。同时&#xff0c;它还支持将这些消息保存在不同的存储…

H5 简约四色新科技风引导页源码

H5 简约四色新科技风引导页源码 源码介绍&#xff1a;一款四色切换自适应现代科技风动态背景的引导页源码&#xff0c;源码有主站按钮&#xff0c;分站按钮2个&#xff0c;QQ联系站长按钮一个。 下载地址&#xff1a; https://www.changyouzuhao.cn/11990.html

适合龙年春节的SVG模版

宝藏模版 往期推荐&#xff08;点击阅读&#xff09;&#xff1a; 趣味效果&#xff5c;高大上&#xff5c;可爱风&#xff5c;年终总结&#xff08;一&#xff09;&#xff5c;年终总结&#xff08;二&#xff09;&#xff5c;循环特效&#xff5c;情人节&#xff08;一&…