文章目录
- Flask设置配置项、视图函数绑定多路由及自定义装饰器的使用
- Flask设置配置项
- Flask视图函数绑定多路由
- 自定义装饰器的使用
Flask设置配置项、视图函数绑定多路由及自定义装饰器的使用
Flask设置配置项
可以通过app.config['key值'] = value值
来修改以下默认配置参数
default_config = ImmutableDict(
{
"ENV": None,
"DEBUG": None,
"TESTING": False,
"PROPAGATE_EXCEPTIONS": None,
"PRESERVE_CONTEXT_ON_EXCEPTION": None,
"SECRET_KEY": None,
"PERMANENT_SESSION_LIFETIME": timedelta(days=31),
"USE_X_SENDFILE": False,
"SERVER_NAME": None,
"APPLICATION_ROOT": "/",
"SESSION_COOKIE_NAME": "session",
"SESSION_COOKIE_DOMAIN": None,
"SESSION_COOKIE_PATH": None,
"SESSION_COOKIE_HTTPONLY": True,
"SESSION_COOKIE_SECURE": False,
"SESSION_COOKIE_SAMESITE": None,
"SESSION_REFRESH_EACH_REQUEST": True,
"MAX_CONTENT_LENGTH": None,
"SEND_FILE_MAX_AGE_DEFAULT": timedelta(hours=12),
"TRAP_BAD_REQUEST_ERRORS": None,
"TRAP_HTTP_EXCEPTIONS": False,
"EXPLAIN_TEMPLATE_LOADING": False,
"PREFERRED_URL_SCHEME": "http",
"JSON_AS_ASCII": True,
"JSON_SORT_KEYS": True,
"JSONIFY_PRETTYPRINT_REGULAR": False,
"JSONIFY_MIMETYPE": "application/json",
"TEMPLATES_AUTO_RELOAD": None,
"MAX_COOKIE_SIZE": 4093,
}
)
比如设置当前application运行环境为开发环境(默认是生产环境)
# 设置配置项
# 设置开启debug模式
app.config['DEBUG'] = True
# 设置启用服务器的端口
app.config['PORT'] = 12306
# 设置application的当前运行环境为开发环境,默认不设置的时候为生产环境
app.config['ENV'] = 'development'
未设置application的当前运行环境为开发环境
前,启动服务控制台输出如下
* Running on http://127.0.0.1:12306/ (Press CTRL+C to quit)
* Restarting with stat
* Serving Flask app "flask02" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Debugger is active!
* Debugger PIN: 740-975-992
设置application的当前运行环境为开发环境
后,启动服务控制台输出如下
* Running on http://127.0.0.1:12306/ (Press CTRL+C to quit)
* Restarting with stat
* Serving Flask app "flask02" (lazy loading)
* Environment: development
* Debug mode: on
* Debugger is active!
* Debugger PIN: 740-975-992
对比一下上边的两次控制台输出,可以看出使用默认生产环境
开运行flask服务时,会提示:这是一个开发服务器。不要在生产部署中使用它。请改用生产WSGI服务器。
相对于flask,生产服务器可以选用uWSGI或Nginx
- uWSGI:uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。
- WSGI / uwsgi / uWSGI 这三个概念的区分
- WSGI是一种通信协议。Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。
- uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
- 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
- Nginx:Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
- Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Flask视图函数绑定多路由
有时候我们需要设置访问多个url路径
返回的页面数据
或后端处理逻辑
都一致,这时候就可以通过视图函数绑定多路由
来实现。
示例
@app.route("/index")
@app.route("/helloWorld")
@app.route("/")
def index():
return "helloWorld"
此时运行flask服务,分别访问http://127.0.0.1:12306/
, http://127.0.0.1:12306/index
, http://127.0.0.1:12306/helloWorld
, 前端页面展示的效果都相同,都是helloWorld
自定义装饰器的使用
有时候我们需要统计某个URL路由的访问次数,就可以通过设置自定义装饰器来实现。
示例
#!/usr/bin/python3
# @FileName :flask02.py
# @Time :2020/5/31 下午9:55
# @Author :ABC
# @Description :
import time
from flask import Flask
app = Flask(__name__)
# 打印当前时间的装饰器
def log_time(f):
def decorator(*args, **kwargs):
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
return f(*args, **kwargs) # 不要return其他的值,否则会被作为response返回
return decorator
# 打印当前时间的装饰器
def log_time1(f):
def decorator1(*args, **kwargs):
app.config['num'] += 1
return f(*args, **kwargs) # 不要return其他的值,否则会被作为response返回
return decorator1
# 一个视图函数上可以同时绑定多个url路由规则
# 如果还有其它装饰器该怎么处理?
# 1.视图装饰器应该放在最外层(比如下边的`@log_time`),否则里边的装饰器不会生效 2.视图函数包裹的装饰器不要return新值,否则会被包装成返回数据返回
# 常用视图函数来统计某个url路由的访问量或记录时间日志
@app.route("/index")
@app.route("/helloWorld")
@app.route("/")
@log_time
def index():
return "helloWorld"
@app.route("/hello")
@log_time1
def index():
return "你好,我叫小花花!这是你第{}次访问本页面!".format(app.config.get('num'))
# 设置配置项
# 设置开启debug模式
app.config['DEBUG'] = True
# 设置启用服务器的端口
app.config['PORT'] = 12306
# 设置application的环境为开发环境,默认不设置的时候为生产环境
app.config['ENV'] = 'development'
# 统计某个url路由的访问次数
app.config['num'] = 0
if __name__ == '__main__':
app.run(port=app.config.get('PORT'), debug=app.config.get('DEBUG'))
然后启用flask服务,前端访问http://127.0.0.1:12306/hello
多次,每访问一次,app.config['num']
就加1,然后前端页面返回本次是第n次访问本页面。
效果如下
第一次访问http://127.0.0.1:12306/hello
刷新当前页面
再次刷新当前页面
以此类推,没刷新一次页面访问页面次数就加1。
好啦,以上就是今天分享的全部内容了,其实学web开发挺有意思的(手动吃瓜~)