Flask框架路由和視圖用法實(shí)例分析
本文實(shí)例講述了Flask框架路由和視圖用法。分享給大家供大家參考,具體如下:
創(chuàng)建一個簡單flask框架程序
#1.導(dǎo)入Flask類
from flask import Flask
#2.創(chuàng)建Flask對象接收一個參數(shù)__name__,它會指向程序所在的包
app = Flask(__name__)
#3.裝飾器的作用是將路由映射到視圖函數(shù)index
@app.route('/')
def index():
return 'Hello World'
#4.Flask應(yīng)用程序?qū)嵗膔un方法,啟動WEB服務(wù)器
if __name__ == '__main__':
app.run()
1.Flask對象參數(shù):
| 參數(shù) | 描述 |
|---|---|
| name | (必寫)代表程序主函數(shù)__main__ |
| static_folder | 靜態(tài)資源文件夾(默認(rèn)static) |
| static_url_path | 靜態(tài)資源路徑(默認(rèn)/static) |
| template_folder | 模板文件夾(默認(rèn)templates) |
2.run方法參數(shù):
| 參數(shù) | 描述 |
|---|---|
| ip | IP地址 |
| port | 端口 |
| debug | 默認(rèn)為False,更改為True可以不重啟服務(wù)器進(jìn)行服務(wù)器修改(ctrl+s保存即可), 并且報錯后會有相應(yīng)提示 |
debug 默認(rèn)為False,更改為True可以不重啟服務(wù)器進(jìn)行服務(wù)器修改(ctrl+s保存即可), 并且報錯后會有相應(yīng)提示
路由視圖函數(shù)
@app.route("/路徑"):路由裝飾器,可以通過路徑執(zhí)行被裝飾的函數(shù)
app.url_map:可查看當(dāng)前路由函數(shù)和路徑
1.動態(tài)參數(shù):@app.route("/路徑/<類型:變量>")
常用類型
| 類型 | 描述 |
|---|---|
| int | 整型 |
| float | 浮點(diǎn)型 |
| path | 字符串型 |
自定義類型:
(1)編寫⾃定義轉(zhuǎn)換器類,繼承BaseConverter
(2)編寫init⽅法
(3)初始化⽗類,⼦類變量
(4)將⾃定義轉(zhuǎn)換器添加到默認(rèn)轉(zhuǎn)換器列表中
例:
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.將自定義轉(zhuǎn)換器添加到,系統(tǒng)默認(rèn)的轉(zhuǎn)換列表中
app.url_map.converters["re"] = MyRegexConverter
print(app.url_map.converters)
# 接收三位整數(shù)
# 通過re調(diào)用的init方法, 參數(shù)1[默認(rèn)]: app.url_map, 參數(shù)2: 自己定義的規(guī)則
@app.route('/<re("\d{3}"):number>')
def hello_world(number):
return "the re number is %s"%number
# 接收四位整數(shù)
@app.route('/<re("\d{4}"):number>')
def get_four_number(number):
return "the four number is %s"%number
# 接收手機(jī)號
@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(默認(rèn)),POST,PUT,DELETE
3.視圖函數(shù)返回內(nèi)容:
(1)直接返回響應(yīng)體對象:
返回響應(yīng)體、狀態(tài)碼、響應(yīng)頭
return "hello","666",{"name":"zhangsan"}
(2)手動創(chuàng)建響應(yīng)體對象:
response = make_response("響應(yīng)體")
response.status = "狀態(tài)碼 狀態(tài)碼描述"
response.headers = {響應(yīng)頭鍵值對}
(response.headers["Content-Type"] = "application/json")
return response
(3)返回json:
jsonify(dict) jsonify(key=value,key2=value2)
(4)重定向:
重定向:redirect("路徑")
反解析:url_for("函數(shù)",key=value)
二者配合使⽤可以傳遞參數(shù)
例:
"""
url_for, 反解析,根據(jù)視圖函數(shù)名稱找到,視圖函數(shù)的路徑地址,可以攜帶參數(shù)
格式: url_for('函數(shù)名',key=value), 返回的是一個地址(字符串)
"""""
from flask import Flask,url_for,redirect
app = Flask(__name__)
# 京東, 代號111
@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錯誤狀態(tài)碼
(2)異常捕獲(errorhandler):
code為HTTP錯誤狀態(tài)碼 @app.errorhandler(code) def fun(): …
參數(shù)加載方式
1.從類中加載:app.config.from_object()
例:
class Config(object): #調(diào)試模式 DEBUG=True app.config.from_object(Config)
2.從配置⽂件中加載:app.config.from_pyfile()
例:
app.config.from_pyfile("config.ini")
3.從環(huán)境變量加載(了解):
app.config.from_envvar()
希望本文所述對大家基于flask框架的Python程序設(shè)計有所幫助。
相關(guān)文章
django admin實(shí)現(xiàn)動態(tài)多選框表單的示例代碼
借助django-admin,可以快速得到CRUD界面,但若需要創(chuàng)建多選標(biāo)簽字段時,需要對表單進(jìn)行調(diào)整,本文通過示例代碼給大家介紹django admin多選框表單的實(shí)現(xiàn)方法,感興趣的朋友跟隨小編一起看看吧2021-05-05
python logging重復(fù)記錄日志問題的解決方法
python的logging模塊是python使用過程中打印日志的利器,下面這篇文章主要給大家介紹了關(guān)于python logging重復(fù)記錄日志問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07
一文讓你徹底搞懂Python中__str__和__repr__
這篇文章主要介紹了Python中的__str__和__repr__的異同,__str__和__repr__是基本的內(nèi)置方法,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以參考閱讀下2023-05-05
Python字符串和二進(jìn)制字符串之間的轉(zhuǎn)換方法示例
python中沒有0-1形式的二進(jìn)制類型,但我們依然可以存儲二進(jìn)制類型的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Python字符串和二進(jìn)制字符串之間的轉(zhuǎn)換方法,需要的朋友可以參考下2023-06-06
python爬取代理IP并進(jìn)行有效的IP測試實(shí)現(xiàn)
這篇文章主要介紹了python爬取代理IP并進(jìn)行有效的IP測試實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
python tkinter實(shí)現(xiàn)簡單計算器功能
這篇文章主要為大家詳細(xì)介紹了python tkinter實(shí)現(xiàn)簡單計算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
Python深度學(xué)習(xí)理解pytorch神經(jīng)網(wǎng)絡(luò)批量歸一化
這篇文章主要是Python深度學(xué)習(xí)篇,通過示例的詳解讓大家更好的理解pytorch神經(jīng)網(wǎng)絡(luò)批量歸一化,有需要的的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10

