flask实际上就是用来作为python部署服务的框架,方便别人调用你写的服务。本文主要记载下自己的使用过程
pip install flask
from flask import Flask
app = Flask(__name__)
绑定路由的作用是,通过路由绑定一个视图函数 @app.route(
'/'): 
告诉Flask哪个URL才能出发对应的函数。
1. 导入Flask类;
from flask import Flask
2. 实例化一个Flask对象;
__name__是模块的名称或者包的名称
作用: 根据这个参数确定flask应用的路径, 从而快速查找模板和html文件的默认路径;
模块就是python文件; 包就是目录(跟普通目录多加一个__init__.py);
#
app = Flask(__name__)
3-1.基本路由:通过路由绑定一个视图函数
@app.route('/'): 告诉Flask哪个URL才能出发对应的函数, 又称为路由;
对应定义了一个视图函数, 也就是返回给用户浏览器显示的内容;
@app.route('/')
def index():
return "<h1>hello world</h1>"
@app.route('/login/')
def login():
return "login"
4. 运行Flask应用, 可以指定ip和端口;
'0.0.0.0' 所有的IP都可以访问到;
app.run('0.0.0.0', 9000)
比如你想调取login这个应用,就是在url为0.0.0.0:9000/login/。
蓝图主要是为了方便多个应用扩展使用的,每当我们想加一个app时都可以通过蓝图注册,然后通过绑定一个不同的路由来实现。蓝图注册如下:
color = Blueprint('color_tagging', __name__)
注册蓝图后绑定路由也不再是app.route,而是你蓝图注册的名字’color’
@color.route(rule='/get', methods=['GET'])
然后再如下进行app的注册
#实例化一个Flask类
app = Flask(__name__)
#注册蓝图
app.register_blueprint(color, url_prefix='/color_tagging')
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
pip install gunicorn
gunicorn app.flaske:app --config bin/gunicorn_config.py
这里app.flaske是我app实例化的py文件所在地,–config后面是gunicorn配置文件的路径
import os
#docker环境部署时获取指定的端口,没有就用默认的
port = os.getenv('PORT', '8080')
#docker环境部署时获取指定的ip地址,没有就用默认的
ip = os.getenv('IPADDR', '0.0.0.0')
bind = '{0}:{1}'.format(ip, port)
docker环境部署时,os.cpu_count()获取到的cpu核数为物理机核数,实际分不到那么多资源
workers = int(os.getenv('CPU_COUNT', 4))
print('Child process number: {} with port: {}'.format(workers, port))
keepalive = 60
timeout = keepalive + 1
graceful_timeout = 1
backlog = 1
proc_name = 'gunicorn_test'
preload_app = True
log_path = os.getenv('MATRIX_APPLOGS_DIR')
if not os.path.exists(log_path):
os.makedirs(log_path)
#控制gunicorn打的日志结构
logconfig_dict = dict(
version=1,
disable_existing_loggers=False,
loggers={
"gunicorn.error": {
"level": "INFO",
"handlers": ["error_console", "error_file"],
"propagate": True,
"qualname": "gunicorn.error"
},
"gunicorn.access": {
"level": "INFO",
"handlers": ["access_file"],
"propagate": True,
"qualname": "gunicorn.access"
}
},
handlers={
"error_console": {
"class": "logging.StreamHandler",
"formatter": "generic",
"stream": "ext://sys.stderr"
},
"access_file": {
"class": "logging.FileHandler",
"formatter": "simple",
"filename": os.path.join(log_path, 'access.log')
},
"error_file": {
"class": "logging.FileHandler",
"formatter": "generic",
"filename": os.path.join(log_path, 'error.log')
}
},
formatters={
"generic": {
"format": "%(asctime)s,%(msecs)03d | %(process)d | %(module)s | %(levelname)s | %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S",
"class": "logging.Formatter"
},
'simple': {
"format": "%(message)s",
"class": "logging.Formatter"
}
}
)
app = Flask(__name__)
gunicorn_logger = logging.getLogger('gunicorn.error')
app.logger.handlers = gunicorn_logger.handlers
app.logger.setLevel(gunicorn_logger.level)
Original: https://blog.csdn.net/weixin_47592657/article/details/125202532
Author: 爱逛街的小黑
Title: flask+gunicorn部署
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/749817/
转载文章受原作者版权保护。转载请注明原作者出处!