經過前幾篇文章的內容, 咱們已經搭建了基於 Flask
框架的一個簡單的 Web
應用, server.py
的代碼以下python
from flask import Flask, make_response from flask.views import MethodView app = Flask(__name__) class IndexHandler(MethodView): def get(self): resp = make_response('It is a GET request') resp.headers['Strict-Transport-Security'] = 'max-age=15768000; includeSubDomains; preload' return resp if __name__ == '__main__': app.add_url_rule('/', view_func=IndexHandler.as_view('index')) context = ('./server.cer', './server.key') app.run(port=443, host='0.0.0.0', debug=True, threaded=True, ssl_context=context)
Page
類因爲咱們在之後的每一個頁面的 Handler
中都要用到 HSTS
, 以及其餘一些共用的特性, 咱們將其提取出來, 抽象成一個 Page
類, 修改 server.py
以下flask
from flask import Flask, make_response from flask.views import MethodView app = Flask(__name__) class Page(MethodView): def render(self, content): resp = make_response(content) resp.headers['Strict-Transport-Security'] = 'max-age=15768000; includeSubDomains; preload' return resp class IndexHandler(Page): def get(self): content = 'It is a GET request' return self.render(content) if __name__ == '__main__': app.add_url_rule('/', view_func=IndexHandler.as_view('index')) context = ('./server.cer', './server.key') app.run(port=443, host='0.0.0.0', debug=True, threaded=True, ssl_context=context)
get_args()
api
args
通常出如今 GET
請求中, 好比 Google 搜索時地址欄出現的 https://www.google.com/search?q=awesome
, 其中 ?
後面的內容就是 args
, 以 key-value
的形式出現. 對應剛纔的例子, key
就是 q
, value
就是 awesome
. 若是有多組 key-value
, 中間就用 &
鏈接, 如 ?q=awesome&type=server
. 這種形式很容易讓咱們聯想到 Python
的字典結構 dict
. 根據 文檔, Flask 是經過 ImmutableMultiDict 來存儲 args
的. 咱們能夠在 Page
類中增長 get_args()
方法cookie
from flask import request class Page(MethodView): def get_args(self, key): return request.args.get(key)
這樣, 咱們就能夠經過調用 get_args()
來獲取用戶請求中的參數了, 舉個栗子app
class AwesomeHandler(Page): def get(self): if self.get_args('q') == 'awesome': # do something return 'This is an awesome page!'
一樣地, 咱們能夠在 Page
類中增長其餘特性, 如 get_date()
, get_referer()
, get_cookies()
等等, 編寫好的 Page
類以下框架
from flask import Flask, make_response, request from datetime import datetime, date class Page(MethodView): def render(self, content): resp = make_response(content) resp.headers['Strict-Transport-Security'] = 'max-age=15768000; includeSubDomains; preload' return resp def get_args(self, key): return request.args.get(key) def get_date(self, year=0, month=0, day=0): if year and month and day: return date(year, month, day) else: return date.today() def get_referer(self): return request.headers.get('referer') def get_cookies(self): return request.cookies