Flask是由python實現的一個web微框架,讓我們可以使用Python語言快速實現一個網站或Web服務。
一、創建一個簡單flask框架程序
#1.導入Flask類
from flask import Flask
#2.創建Flask對象接收一個參數__name__,它會指向程序所在的包
app = Flask(__name__)
#3.裝飾器的作用是將路由映射到視圖函數index
@app.route('/')
def index():
return 'Hello World'
#4.Flask應用程序實例的run方法,啓動WEB服務器
if __name__ == '__main__':
app.run()
1.Flask對象參數:
2.run方法參數:
debug 默認爲False,更改爲True可以不重啓服務器進行服務器修改(ctrl+s保存即可), 並且報錯後會有相應提示
二、路由視圖函數
@app.route("/路徑"):路由裝飾器,可以通過路徑執行被裝飾的函數
app.url_map:可查看當前路由函數和路徑
1.動態參數:@app.route("/路徑/<類型:變量>")
常用類型
自定義類型:
(1)編寫⾃定義轉換器類,繼承BaseConverter
(2)編寫init⽅法
(3)初始化⽗類,⼦類變量
(4)將⾃定義轉換器添加到默認轉換器列表中
from flask import Flask
from werkzeug.routing import BaseConverter
#1.自定義類,繼承自BaseConverter
class MyRegexConverter(BaseConverter):
# 2.編寫方法, init
def __init__(self,map,regex):
# 3.初始化, 父類, 子類變量
super(MyRegexConverter, self).__init__(map)
self.regex = regex
app = Flask(__name__)
# 4.將自定義轉換器添加到,系統默認的轉換列表中
app.url_map.converters["re"] = MyRegexConverter
print(app.url_map.converters)
# 接收三位整數
# 通過re調用的init方法, 參數1[默認]: app.url_map, 參數2: 自己定義的規則
@app.route('/<re("\d{3}"):number>')
def hello_world(number):
return "the re number is %s"%number
# 接收四位整數
@app.route('/<re("\d{4}"):number>')
def get_four_number(number):
return "the four number is %s"%number
# 接收手機號
@app.route('/<re("1[3456789]\d{9}"):mobile>')
def get_mobile_number(mobile):
return "the mobile number is %s"%mobile
if __name__ == '__main__':
app.run()
2.指定請求方式:
@app.route("/路徑",methods=["⽅式1","方式2"])
方式:GET(默認),POST,PUT,DELETE
3.視圖函數返回內容:
(1)直接返回響應體對象:
返回響應體、狀態碼、響應頭
return "hello","666",{"name":"zhangsan"}
(2)手動創建響應體對象:
response = make_response("響應體")
response.status = "狀態碼 狀態碼描述"
response.headers = {響應頭鍵值對}
(response.headers["Content-Type"] = "application/json")
return response
(3)返回json:
jsonify(dict)
jsonify(key=value,key2=value2)
(4)重定向:
重定向:redirect(“路徑”)
反解析:url_for(“函數”,key=value)
二者配合使⽤可以傳遞參數
例:
url_for, 反解析,根據視圖函數名稱找到,視圖函數的路徑地址,可以攜帶參數
格式: url_for(‘函數名’,key=value), 返回的是一個地址(字符串)
from flask import Flask,url_for,redirect
app = Flask(__name__)
@app.route('/jingdong')
def jingdong():
#print(url_for("taobao")) #/taobao
# print(url_for("taobao",token=111)) #/taobao/111
response = redirect(url_for("taobao",token=111))
return response
#易迅, 代號222
@app.route('/yixun')
def yixun():
response = redirect(url_for("taobao",token=222))
return response
@app.route('/other')
def other():
response = redirect(url_for("taobao",token=888))
return response
@app.route('/taobao/<int:token>')
def taobao(token):
#判斷哪個平臺過來的用戶
if(token == 111):
return "歡迎京東用戶,光臨淘寶,給你打9折"
elif(token == 222):
return "歡迎易迅用戶,光臨淘寶,給你打5折"
else:
return "其他用戶"
if __name__ == '__main__':
app.run()
4.異常處理:
(1)拋出異常(abort):
abort(code)
code爲HTTP錯誤狀態碼
(2)異常捕獲(errorhandler):
code爲HTTP錯誤狀態碼
@app.errorhandler(code)
def fun():
…
參數加載方式
從類中加載:app.config.from_object()
例:
class Config(object):
#調試模式
DEBUG=True
app.config.from_object(Config)
2.從配置⽂件中加載:app.config.from_pyfile()
例:
app.config.from_pyfile("config.ini")
3.從環境變量加載(瞭解):
app.config.from_envvar()