发布用flask框架开发的python后端程序到windows服务器
创始人
2024-10-22 02:38:29
0

flask框架开发的python后端程序开发好了后,怎么发布到生产环境呢?
以app.run()的方式在生产环境上启动服务,当有异常特别容易退出,而且性能很弱。
生产环境下,python常见的web部署搭配是 nginx+gunicorn。但是这种搭配只适合在Linux环境下。gunicorn不支持windows环境。如果要搭建在windows环境下,可以使用Flask + Tornado+nginx的部署方案。
#一、安装Tornado

pip install tornado 

#二、后端程序flask_app.py
假设已经开发好一个后端程序,以一个处理前端发来的登录请求为例,示例代码如下:

# 导入Flask模块 from flask import Flask, request, jsonify app = Flask(__name__) @app.route("/") def hello():     return "Hello World!"  # 假设的用户数据库,实际应用中应该是数据库查询 users_db = {     "user1": "password1",     "user2": "password2" }  @app.route("/login", methods=['POST']) def login():     # 获取请求体中的数据,这里假设前端发送的是JSON格式     data = request.get_json()          # 获取用户名和密码     username = data.get('username')     password = data.get('password')          # 检查用户名是否存在     if username not in users_db:         return jsonify({'message': 'User not found'}), 200          # 检查密码是否正确     if users_db[username] == password:         # 如果用户名和密码都正确,返回成功消息         return jsonify({'message': 'Login successful'}), 200     else:         # 如果密码错误,返回错误消息         return jsonify({'message': 'Incorrect password'}), 200 

#三、编写Tornado的 server.py文件
server.py文件与flask_app.py要存放在同一个目录下。

from tornado.httpserver import HTTPServer from tornado.wsgi import WSGIContainer from flask_app import app from tornado.ioloop import IOLoop  s = HTTPServer(WSGIContainer(app)) s.listen(8080) # 监听 8080 端口 IOLoop.current().start() 

这段代码使用了Python的Tornado库和Flask框架来创建一个Web服务器。下面是逐行解释:

1.from tornado.httpserver import HTTPServer:
这行代码从tornado.httpserver模块导入HTTPServer类。HTTPServer是Tornado库中用于创建HTTP服务器的类。
2.from tornado.wsgi import WSGIContainer:
这行代码从tornado.wsgi模块导入WSGIContainer类。WSGIContainer是一个适配器,它允许Tornado的HTTP服务器与WSGI(Web Server Gateway Interface)应用一起工作。Flask是一个WSGI应用。
3.from flask_app import app:
这行代码从flask_app模块导入app对象。这里假设flask_app.py是一个Python文件,其中创建了一个Flask应用实例并将其赋值给变量app。
4.from tornado.ioloop import IOLoop:
这行代码从tornado.ioloop模块导入IOLoop类。IOLoop是Tornado的事件循环,用于处理异步IO操作。
5.s = HTTPServer(WSGIContainer(app)):
这行代码创建了一个HTTPServer实例,并将WSGIContainer(app)作为参数传递给它。这将Flask应用app包装在一个WSGI容器中,使其能够在Tornado服务器上运行。
6.s.listen(8080):
这行代码让服务器监听本地的8080端口。这意味着服务器将接受发送到端口8080的HTTP请求。
7.IOLoop.current().start():
这行代码启动当前的IOLoop事件循环。在Tornado中,事件循环负责处理所有的异步操作,包括网络请求、定时器等。调用start方法后,服务器将开始接受和响应HTTP请求。
总的来说,这段代码的作用是将一个Flask应用部署到一个使用Tornado作为底层服务器的Web服务器上,监听8080端口,并启动事件循环以处理请求。这是一种常见的做法,用于利用Tornado的非阻塞特性来提高Flask应用的性能。

#四、启动服务
切换到 python server.py 所在的目录,然后执入如下命令:

python server.py 

在浏览器中访问 http://ip:8080 ,收到返回:Hello World!即为发布成功。
注意:
由于视图函数login()为POST模式,所以不能在浏览器地址栏输入地址http://ip:8080/login的 方式测试。需通过浏览器调试模式或用postman工具发送post请求进行测试。
如何使用postman发送post请求可以参考:https://blog.csdn.net/cultivate1/article/details/140357700
#五、跨域问题
由于前端和后端可能在不同的端口或域名上运行,浏览器可能会阻止跨域请求。可以使用CORS来解决这个问题,但需要确保它在所有路由上都有效。如果 CORS没有正确配置,前端请求可能会因为跨域问题而被阻止。
CORS(跨源资源共享)是一种安全策略,它允许你指定哪些外部域可以访问你的服务器资源。在使用 Flask 时,可以通过 flask_cors 扩展来实现 CORS 支持。以下是如何配置 flask_cors 的一些基本步骤:
##安装 flask_cors:
首先,你需要安装 flask_cors 扩展。可以通过 pip 来安装:

pip install flask-cors 

##导入 CORS:
在 Flask 应用中导入 CORS:

from flask_cors import CORS 

##应用 CORS:
在你的 Flask 应用实例上应用 CORS。这可以通过两种方式完成:直接在应用实例上调用 CORS(),或者作为装饰器应用到特定的路由上。

###全局应用 CORS:
如果你想允许所有跨域请求,可以在应用实例上直接使用 CORS():

app = Flask(__name__) CORS(app) 

###局部应用 CORS:
如果只想对特定的路由启用 CORS,可以作为装饰器使用:

@app.route("/login", methods=['POST']) def login():     # 你的登录逻辑 

##配置 CORS 参数:
CORS() 函数接受多个参数来自定义 CORS 行为。以下是一些常用的参数:
origins: 指定允许的源。可以是单个源的字符串,或者源列表。使用 “*” 表示允许所有源。
methods: 指定允许的 HTTP 方法。默认为所有方法。
allow_headers: 指定允许的 HTTP 头。
expose_headers: 指定客户端可以访问的服务器响应头。
supports_credentials: 布尔值,指示是否允许发送凭证(如 Cookies 或 HTTP 认证)。
max_age: 预检请求的缓存时间(秒)。
例如,如果你想只允许特定的源进行跨域请求,可以这样配置:

CORS(app, origins=["http://example.com"]) 

##测试 CORS 配置:
配置完成后,确保测试 CORS 设置以验证它是否按预期工作。

这里将上面的后端程序配置 CORS ,允许所有源访问所有路由,示例代码:

# 导入Flask模块 from flask import Flask, request, jsonify from flask_cors import CORS  app = Flask(__name__) CORS(app) @app.route("/") def hello():     return "Hello World!"  # 假设的用户数据库,实际应用中应该是数据库查询 users_db = {     "user1": "password1",     "user2": "password2" }  @app.route("/login", methods=['POST']) def login():     # 获取请求体中的数据,这里假设前端发送的是JSON格式     data = request.get_json()          # 获取用户名和密码     username = data.get('username')     password = data.get('password')          # 检查用户名是否存在     if username not in users_db:         return jsonify({'message': 'User not found'}), 200          # 检查密码是否正确     if users_db[username] == password:         # 如果用户名和密码都正确,返回成功消息         return jsonify({'message': 'Login successful'}), 200     else:         # 如果密码错误,返回错误消息         return jsonify({'message': 'Incorrect password'}), 200 

#六、配置nginx反向代理

http {        server {         listen       80;         server_name  www.test.com;         charset     utf-8;                   location / {             root   html;             index  index.html index.htm;             proxy_pass  http://ip:8080;         }         } 

配置好nignx反向代理,这样在浏览器中直接访问www.test.com 即可

如果不知道如何在windows下安装和使用nginx,网上教程很多,可以下载学习。

相关内容

热门资讯

科技实测!牛牛房卡怎么获得光明... 科技实测!牛牛房卡怎么获得光明联盟//全网房卡低价售Sa9Ix苹果iPhone 17手机即将进入量产...
正规平台有哪些,游戏微信牛牛房... 豌豆互娱房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
玩家攻略,牛牛房卡制作链接玫天... 玫天爱玩是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
玩家攻略,金花房卡专卖店新竹大... 您好!微信新竹大厅大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(新竹大厅)大厅介绍:...
头条推荐!牛牛充值房卡红桃众娱... 今 日消息,红桃众娱房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
重大通报,牛牛房卡批发平台天道... 重大通报,牛牛房卡批发平台天道联盟/房卡官方正版房卡代理Sa9Ix苹果iPhone 17手机即将进入...
头条推荐!牛牛房卡游戏平台加盟... 头条推荐!牛牛房卡游戏平台加盟新蛮王/房卡价格表多少钱一张新蛮王是一款非常受欢迎的游戏,咨询房/卡添...
科技实测!游戏微信牛牛房卡盘古... 盘古大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
玩家攻略,金花房卡出售芝麻大厅... 玩家攻略,金花房卡出售芝麻大厅/微信链接房卡从哪里获取Sa9Ix苹果iPhone 17手机即将进入量...
推荐一款!金花房卡官网趣游联盟... 您好!微信趣游联盟大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(趣游联盟)大厅介绍:...
正规平台有哪些,牛牛房卡制作链... 您好!微信九酷众娱大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(九酷众娱)大厅介绍:...
重大通报,牛牛房卡制作链接光明... 今 日消息,光明联盟房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
ia攻略/斗牛房间怎么创建的火... 火狐大厅/新超圣房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 ...
头条推荐!金花房卡代理零售新海... 头条推荐!金花房卡代理零售新海贝/青鸟大厅/房卡批发市场价格表新海贝/青鸟大厅是一款非常受欢迎的游戏...
科技实测!金花房卡代理零售新竹... 新竹大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
科技实测!牛牛房卡怎么购买复仇... 科技实测!牛牛房卡怎么购买复仇者联盟//全网房卡低价售Sa9Ix苹果iPhone 17手机即将进入量...
IA解析/金花房卡出售白虎大厅... 您好!微信白虎大厅大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(白虎大厅)大厅介绍:...
正规平台有哪些,斗牛房间怎么创... 鸿狐大厅房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
玩家攻略,金花房卡官网龙马大厅... 玩家攻略,金花房卡官网龙马大厅/房卡链接怎么弄的龙马大厅是一款非常受欢迎的游戏,咨询房/卡添加微信:...
一分钟了解!金花房间怎么创建长... 长虹大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...