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服務器。
- WSGI / uwsgi / uWSGI 這三個概念的區分
- 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開發挺有意思的(手動喫瓜~)