1. 程式人生 > 實用技巧 >Flask——路由正則,Request方法,Response方法,cookies,session,閃現,請求擴充套件

Flask——路由正則,Request方法,Response方法,cookies,session,閃現,請求擴充套件

路由支援正則

#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)}}