免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
小白學Flask| 把路由轉換器玩的更牛逼
daredevil愛科技 2019-10-16 10:39:35

原創(chuàng): JAP君 JAVAandPython君

本文內容:

路由轉換器的進階使用

自定義轉換器

在上篇文章中我們也簡單說了一下如何自定義轉換器,我把代碼重新弄過來:



# -*- coding: utf-8 -*-
from flask import Flask
from werkzeug.routing import BaseConverter
app = Flask(__name__)
# 1.定義自己的轉換器
class RegexConverte(BaseConverter):
def __init__(self, url_map, regex):
# 調用父類的初始化方法
super(RegexConverte, self).__init__(url_map)
# 將正則表達式的參數(shù)保存在對象的屬性中,flask會去使用這個屬性來進行路由的正則匹配
self.regex = regex
# 2. 將自定義的轉換器添加到flask的應用中
app.url_map.converters["re"] = RegexConverte
@app.route("/send/<re(r'1[345678]\d{9}'):moblie>")
def send_sms(moblie):
return "send_sms: %s" % moblie
if __name__ == '__main__':
# 啟動flask程序
app.run(debug=True)

大家可能看著一個例子會有點懵,這里我再寫一個比較具體的例子給大家,這次的例子還是提取電話號碼 :


# -*- coding: utf-8 -*-
from flask import Flask
from werkzeug.routing import BaseConverter
app = Flask(__name__)
class MobileConverte(BaseConverter):
def __init__(self,url_map):
# 調用父類的初始化方法
super(MobileConverte, self).__init__(url_map)
self.regex = r'1[345678]\d{9}'
# 2. 將自定義的轉換器添加到flask的應用中
app.url_map.converters["mobile"] = MobileConverte
@app.route("<mobile:moblie_num>")
def send_sms(moblie_num):
return "send_sms: %s" % moblie_num
if __name__ == '__main__':
# 啟動flask程序
app.run(debug=True)

大家會注意到在第10行,self.regex = r'1[345678]\d{9}' ,這句話其實就是我們整個功能的核心,在上一個例子中,我們是需要自己去定義正則表達式的,而這個例子只能實現(xiàn)提取電話號碼這一個功能。

to_python方法

大家在自定義轉換器時可能會發(fā)現(xiàn)我們需要創(chuàng)建一個類,然后我們初始化這個類。

按照這種寫法一般不僅僅只是寫了個__init__方法就可以實現(xiàn)轉換器,而是這個類中還有其他的方法。

我們可以看到我們所繼承的父類BaseConverter中,有to_python和to_url兩個方法,我們首先來看看to_python方法。

其實to_python這個方法才是轉換器的核心,當我們轉換器提取到路徑上面的參數(shù)后,不是直接返回給視圖函數(shù)中的參數(shù),而是要經過to_python方法才返回給視圖函數(shù),我給大家畫了張圖可能更容易理解:

怎么驗證這個說法呢?我給大家舉個例子:

大家可以看到我把to_python方法的返回值給改成了123456,我們運行一下看看它是返回“123456”還是返回路徑中所提取的參數(shù)

可以看到無論我在地址欄上輸入什么,返回都是123456

那么有人會問這個方法有些什么用呢?

當然是有很大用處的,就拿我們提取手機號碼參數(shù)舉例,如果我們只希望用戶提交的是133開頭的手機號,我們就可以在to_python這個方法里面去進行操作。

to_url方法

除了to_python方法,這個方法有什么用呢?其實to_url方法和我們之前講的url_for方法有著很大的聯(lián)系,我們可以看下下面的代碼:


# -*- coding: utf-8 -*-
from flask import Flask,redirect,url_for
from werkzeug.routing import BaseConverter
app = Flask(__name__)
class MobileConverte(BaseConverter):
def __init__(self,url_map):
# 調用父類的初始化方法
super(MobileConverte, self).__init__(url_map)
self.regex = r'1[345678]\d{9}'
def to_python(self, value):
return "123456"
# 2. 將自定義的轉換器添加到flask的應用中
# app.url_map.converters["re"] = RegexConverte
app.url_map.converters["mobile"] = MobileConverte
# http://127.0.0.1:5000/send/15123451234
@app.route("/send/<mobile:moblie_num>")
def send_sms(moblie_num):
return "send_sms: %s" % moblie_num
@app.route("/index")
def index():
url = url_for("send_sms", moblie_num="1892231312")
return redirect(url)
if __name__ == '__main__':
# 啟動flask程序
app.run(debug=True)

我們主要看:


@app.route("/index")
def index():
url = url_for("send_sms", moblie_num="1892231312")
return redirect(url)

可以看到我們url_for里面有兩個參數(shù),第一則是指向我們send_sms視圖函數(shù)的,后面那個則是send_sms函數(shù)中所提取電話號碼的值。通過這樣傳值我們就可以通過url_for來調用一些有變化的參數(shù)的視圖函數(shù)。

其實和to_python方法一樣,每次進行url_for提交的參數(shù)都會先經過to_url,經過處理后才會返回回去。這里我就不過多演示。

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
盤點Python網頁開發(fā)輕量級框架Flask知識(上篇)
flask第二十一篇——練習題
框架-flaskの開發(fā)
初識Flask
flask插件全家桶集成學習
Python Flask Web 框架入門
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服