video5python
flask特色:flask
1,爲框架,簡介,高擴展性。瀏覽器
2,flask相關依賴(jinja2,werkzeug)設計優秀。app
3,開發高效,如SQL的ORM框架
video6 debug模式ide
我只推薦run->edit函數
video7 配置文件post
1,文件方式ui
若文件路勁不帶,可加silent讓它在找不到路徑時候也不報錯。url
2,常規方式
video8 URL中的兩種傳參
path能夠接受‘/’。
能夠接受多個‘/’的URL:
能夠接受UUID:
全宇宙都惟一的隨機數,能夠作主鍵。
any:能夠指定多種路徑
1 @app.route('/<any(blog,user):url_path>/<id>') 2 def detail(url_path,id): 3 if url_path == 'blog': 4 return 'Blog:%s' %id 5 else: 6 return 'User:%s' %id
做用:不一樣的URL對應相同的視圖函數就這麼作。
video9 url_for
帶參數的list函數中的page代入url_for的過程。
若是多帶一個count呢?
則將以查詢字符串的形式出現,結果爲:
帶參數的視圖函數有個功能:
當你瀏覽一個網頁想要評論的時候發現本身沒登錄,等你登錄後又能回到你剛纔要評論的頁面,這種狀況下能夠實現經過url_for帶參數的視圖函數。
先用arg獲取那個url後綴參數,經過url_for返到評論頁面。
video10 自定義url_for轉換器
轉換器中已經存在int,float,string,UUID,path,any。那麼咱們定義一個電話號碼的?
from werkzeug.routing import BaseConverter
在BaseConverter中Ctrl+B查看源代碼:
發現一個父類: class BaseConverter(object) 而any繼承了這個父類: class AnyConverter(BaseConverter): 且最後有一個對應關係: #: the default converter mapping for the map. DEFAULT_CONVERTERS = { 'default': UnicodeConverter, 'string': UnicodeConverter, 'any': AnyConverter, 'path': PathConverter, 'int': IntegerConverter, 'float': FloatConverter, 'uuid': UUIDConverter, }
也就是說咱們本身能夠定義一個:
class TelephoneConverter(BaseConverter):
電話轉換器去繼承父類,而後加入默認映射表中。
1 from flask import Flask 2 from werkzeug.routing import BaseConverter 3 4 app = Flask(__name__) 5 6 #url中限定手機號碼的格式 7 class TelephoneConverter(BaseConverter): 8 regex = r'1[345678]\d{9}' 9 num_convert = int 10 app.url_map.converters['tel'] = TelephoneConverter 11 12 @app.route('/tel/<tel:my_tel>') 13 def gg(my_tel): 14 return '%s' %my_tel
第8行表示11位的電話號碼。
第10行表示添加到默認映射表中。
結果爲:
下面定義a+b形式的轉換器:
先看代碼:
1 #現有需求須要訪問a、b兩個板塊的文章返回出來 2 from werkzeug.routing import BaseConverter 3 class ListConverter(BaseConverter): 4 def to_python(self, value): 5 return 'hahaha' 6 app.url_map.converters['list'] = ListConverter 7 8 @app.route('/list/<list:bankuai>') 9 def aabb(bankuai): 10 return '%s' %bankuai
再看結果:
咱們發現這個to_python函數中的value實際上接受了url中的a+b,可是這個函數中咱們的寫法是無論傳入什麼咱們都返回hahaha,因此頁面上返回了hahaha。也就是說url中的值會經由to_python傳給視圖函數。to_url相反。
若是咱們在to_python函數中寫上別的東西呢?豈不是能實現咱們想要的轉換器?
1 #現有需求須要訪問a、b兩個板塊的文章返回出來 2 from werkzeug.routing import BaseConverter 3 class ListConverter(BaseConverter): 4 def to_python(self, value): 5 return value.split('+') 6 app.url_map.converters['list'] = ListConverter 7 8 @app.route('/list/<list:bankuai>') 9 def aabb(bankuai): 10 return '%s' %bankuai
第5行是變化後的代碼,效果以下:
再講講to_url。
1 from werkzeug.routing import BaseConverter 2 from flask import url_for 3 class ListConverter(BaseConverter): 4 def to_python(self, value): 5 return value.split('+') 6 def to_url(self, value): 7 print("value:",value) 8 return "+".join(value) 9 app.url_map.converters['list'] = ListConverter 10 11 @app.route('/list/<list:bankuai>') 12 def aabb(bankuai): 13 return '%s' %bankuai 14 15 @app.route('/') 16 def hello_world(): 17 print(url_for('aabb',bankuai=['d','c'])) 18 return 'to_url'
17的bankuai進入到to_url中,傳進去的是['d','c'],因此第7行返回了這個值,而後return回「+」鏈接的dc,最終在url_for的時候就打印成了‘/list/d+c’
結果:
第一個值是7行的,第二個是17行的。
總結下:
video11 url_for小細節
先看代碼塊
1 @app.route('/list/') 2 def hello_world(): 3 return 'Hello World!'
再看效果:
咱們發現咱們在第1行list後帶了個「/」,而後在瀏覽器輸入時候帶不帶這個斜槓都能訪問到。
再看不帶斜槓的:
因此咱們選擇第一種,由於第二種方法中可能代碼中沒寫url寫了的時候會出故障。
get和post
video12 重定向詳解
video13 關於響應(Response)
video29 加載靜態文本
用url_for
video 30 模板繼承
super繼承了父模板中的文件。