Flask——路由正則,Request方法,Response方法,cookies,session,閃現,請求擴充套件
阿新 • • 發佈:2020-08-26
路由支援正則
#1 寫類,繼承BaseConverter #2 註冊:app.url_map.converters['regex'] = RegexConverter #3 使用:@app.route('/index/<regex("\d+"):nid>') 正則表示式會當作第二個引數傳遞到類中 from flask import Flask, views, url_for from werkzeug.routing import BaseConverter app = Flask(import_name=__name__) class RegexConverter(BaseConverter): """ 自定義URL匹配正則表示式 """ def __init__(self, map, regex): super(RegexConverter, self).__init__(map) self.regex = regex def to_python(self, value): """ 路由匹配時,匹配成功後傳遞給檢視函式中引數的值 """ return int(value) def to_url(self, value): """ 使用url_for反向生成URL時,傳遞的引數經過該方法處理,返回的值用於生成URL中的引數 """ val = super(RegexConverter, self).to_url(value) return val # 新增到flask中 app.url_map.converters['regex'] = RegexConverter @app.route('/index/<regex("\d+"):nid>') def index(nid): print(url_for('index', nid='888')) return 'Index' if __name__ == '__main__': app.run()
request 方法
request.method 提交的方法 request.args get請求提及的資料 request.form post請求提交的資料 request.values post和get提交的資料總和 request.cookies 客戶端所帶的cookie request.headers 請求頭 request.path 不帶域名,請求路徑 request.full_path 不帶域名,帶引數的請求路徑 request.url 帶域名帶引數的請求路徑 request.base_url 帶域名請求路徑 request.url_root 域名 request.host_url 域名 request.host 127.0.0.1:500 request.files
Response 方法
# 三板斧 return "字串" return render_template('html模板路徑',**{}) return redirect('/index.html') # django:JsonResponse return jsonify({'k1':'v1'}) # 設定 cookies aa='hello world' res=make_response(aa) res.set_cookie('xxx','lqz') response.delete_cookie('key') # 設定應頭 res.headers['X-Something'] = 'A value' response = make_response(render_template('index.html')) # response是flask.wrappers.Response型別
session
# 全域性匯入
# 檢視函式中
session['key']=value
# 刪除:
session.pop('key')
# 取:
session['key']
# open_session
# save_session
閃現
-設定: flash('aaa')
-取值:get_flashed_message()
-設定:flash('lqz',category='error1')
-取值:res=get_flashed_messages(category_filter=['error1'])
-假設在a頁面操作出錯,跳轉到b頁面,在b頁面顯示a頁面的錯誤資訊
請求擴充套件
類似於django的中介軟體
1 請求來了就會觸發,類似於django的process_request,如果有多個,順序是 從上往下
沒問題 return None
@app.before_request
def before(*args,**kwargs):
if request.path=='/login':
return None
else:
name=session.get('user')
if not name:
return redirect('/login')
2 請求走了就會觸發,類似於django的process_response,如果有多個,順序是 從下往上
@app.after_request
def after(response):
return response
3 before_first_request 專案啟動起來第一次會走,以後都不會走了,也可以配多個(專案啟動初始化的一些操作)
@app.before_first_request
def first():
print('我的第一次')
4 每次檢視函式執行完了都會走它,# 用來記錄出錯日誌
@app.teardown_request
def ter(e):
print(e)
5 errorhandler繫結錯誤的狀態碼,碼匹配,就走
@app.errorhandler(404)
def error_404(arg):
return render_template('error.html',message='404錯誤')
6 全域性標籤
@app.template_global()
def sb(a1, a2):
return a1 + a2
# 在模板中:{{ sb(3,4) }}
7 全域性過濾器
@app.template_filter()
def db(a1, a2, a3):
return a1 + a2 + a3
# 在模板中{{ 1|db(2,3)}}