python2與python3都有經(jīng)典類和新式類這兩種寫法黍匾,在python2中經(jīng)典類和新式類的.? ? 繼承方式不一樣,在python3中都一樣玉雾。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在python2中 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 新式類:廣度繼承 多繼承時(shí)色建,實(shí)例化的對象在調(diào)用模塊時(shí)先從實(shí)例化類本身去去尋找,找不到然后去所繼承的第一個(gè)父類去尋找蜘澜,如第一個(gè)父類中沒有就去實(shí)例化類的第二個(gè)繼承的父類中去尋找,如還找不到且實(shí)例化類沒有其他父類時(shí)凉倚,從實(shí)例化類的第一個(gè)父類的父類去找兼都,以此類推. ? ? ? ? ? ? ? ? ? 經(jīng)典類:深度繼承 多繼承時(shí),實(shí)例化的對象在調(diào)用模塊時(shí)先從實(shí)例化類本省去尋找稽寒,找 不到時(shí)扮碧,從實(shí)例化類繼承的第一個(gè)父類中去尋找,找不到直接在第一個(gè)父類中的父類繼續(xù)尋找杏糙,找不到在去實(shí)例化的第二個(gè)父類去尋找慎王,一次類推。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在python3中 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 兩者都采用優(yōu)先廣度搜索的繼承方式GET POST PUT DELETE OPTIONS
常見狀態(tài)碼
200 請求成功 一般用于GET 和POST請求 301 永久移動 請求的資源已經(jīng)被永久的移動到新url宏侍,返回信息包括新的url赖淤,瀏覽器會自動定向到新url。今后任何新的請求都應(yīng)使用新的url代替谅河。 ? ? ? ? ? ? ? ? ? ? 302 臨時(shí)移動咱旱,與301類似确丢。但資源只是臨時(shí)移動⊥孪蓿客戶端應(yīng)繼續(xù)使用原有url ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 404 服務(wù)器無法根據(jù)客戶端的請求找到資源(網(wǎng)頁)鲜侥。該頁面可以自定義 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 405 客戶端請求中的方法被禁止????????????????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 500 服務(wù)器內(nèi)部錯(cuò)誤,無法完成請求
django的csrf防護(hù)在中間鍵中執(zhí)行 執(zhí)行于process_view階段
轉(zhuǎn)換器的本質(zhì)就是正則 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 框架的作用是提供路由和視圖 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .cfg .ini .config 都屬于配置文件
配置參數(shù)
1 在程序中加載配置文件 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? from flask import Flask ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? app = Flask(__name__) __name__:表示當(dāng)前的模塊名字? 創(chuàng)建Flask對象诸典,F(xiàn)lask會以傳入模塊的位置當(dāng)作家目錄 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? xxxxxxx
app.config.from_pyfile('xxxxx')
xxxxxx
2 類方式配置
xxxxxx
class Config(object):
DEBUG = True
app.config.from_object(Config)
3 直接操作配置
直接操作適用于參數(shù)較少的場景描函,config本質(zhì)其實(shí)就是一個(gè)字典
x'x'x'x'xx
app.config["DEBUG"] = True
xxxxxxx
4 對象上配置
xxxxx
app.debug = True
xxxxx
5 參數(shù)傳入配置
if __name__ == '__main__':
app.run(debug=True) #這個(gè)括號中只允許用 debug,host,port這三個(gè)參數(shù)
去配置參數(shù)
想在視圖函數(shù)中,把配置參數(shù)取到并使用
xxxxx
@app.route('/')
def abc():
? ? print(app.config.get('TEST')) #如果能拿到app對象狐粱,就可以通過app取自定義的配置參數(shù)
? ? print(current_app.config.get('TEST')) #如果拿不到舀寓,可以通過current_app這個(gè)app的
代理人拿到
? ? return xxxxx
app.config["DEBUG"] = True
app.config["TEST"] = 'test'
支持外部訪問
我們修改調(diào)用run()的方法使我們的服務(wù)器公開可用
app.run(host='0.0.0.0',port=5000) #0.0.0.0代表任何能代表這臺機(jī)器的地址都可以訪
問
路由
就是我們在瀏覽器輸入地址后,后臺進(jìn)行匹配肌蜻,如果匹配上互墓,則執(zhí)行此視圖函數(shù)并返回內(nèi)容
Flask用一個(gè)叫route()的裝飾器進(jìn)行裝飾到視圖函數(shù)上? 一個(gè)視圖函數(shù)上可以有多個(gè)裝飾器
from flask import Flask
app = Flask(__name__)
@app.route('/')? #路由
def index():
? ? return 'my index !'
xxxxxx
重定向
重定向時(shí)網(wǎng)站比較常用的地址跳轉(zhuǎn),比如我們在網(wǎng)站登陸后蒋搜,需要重新跳轉(zhuǎn)到首頁轰豆,這個(gè)
功能我們就可以用到重定向
from flask imprort redirect(用于重定向),url_for(參數(shù)時(shí)視圖函數(shù)的名字,它會根據(jù)函數(shù)的名字
找到裝飾器視圖的路由)
from flask import Flask
from flask import redirect,url_for
app = Flask(__name__)
@app.route('/')
def index():
? ? return 'my index!'
@app.route('/center')
def center():
? ? return redirect(url_for('index')) #括號中一定要是目標(biāo)函數(shù)的函數(shù)名
請求方式
常用的請求方式有
GET 獲取資源
POST 新增資源
PUSH 更新資源
DELETE 刪除資源
OPTIONS 詢問支持方法
@app.route('/login',methods=['POST','GET'......])
此時(shí)如果用不支持的方法去訪問的話會報(bào)405
flask中轉(zhuǎn)換器用來獲取url中的傳入的參數(shù)
FLask轉(zhuǎn)換器
default 接受字符串齿诞,默認(rèn)轉(zhuǎn)換器? 格式化時(shí)用%d
string 接受字符串,跟默認(rèn)一樣 格式化時(shí)用%d
int 接受整數(shù) 格式化時(shí)用%d
float 同int骂租,但只接受浮點(diǎn)數(shù) 格式化時(shí)用%f
path 和默認(rèn)的相似祷杈,但可以接受'/'且不能以'/'開頭
example:
from flask import Flask
app = Flask(__name__) #將該文件所有路徑設(shè)位主目錄
@app.route('/center/<int:uid>') #代表個(gè)人中心頁
def center(uid): #視圖函數(shù)
return 'xxxxxx %d' %d uid
if __name__=='__main__';
app.run()
自定義轉(zhuǎn)換器
強(qiáng)化轉(zhuǎn)換器的功能,使其能完成復(fù)雜的任務(wù)
.......
from werkzeug.routing import BaseConverter
通過分析源碼得知轉(zhuǎn)換器都繼承自BaseConverter
所以我們需要寫個(gè)類來繼承BaseConverter
class MyConverter(BaseConverter):
def __init__(self,map): #重寫父類init方法
? ? super().__init__(map) 調(diào)用父類init方法
? ? self.regex = r'\d{5,10}'? #轉(zhuǎn)換器的核心正則 正則可以寫成參數(shù)渗饮,用傳參的方式
引入正則但汞,這樣可以使代碼更加靈活
app.url_map.converters['re'] = MyConverter # 注冊