flask框架視圖函數(shù)用法示例
本文實例講述了flask框架視圖函數(shù)用法。分享給大家供大家參考,具體如下:
flask框架 視圖函數(shù)當(dāng)中 各種實用情況簡單配置
1 建立連接
2 路由參數(shù)
3 返回網(wǎng)絡(luò)狀態(tài)碼
4 自定義錯誤頁面
5 重定向
6 正則url限制 和 url 優(yōu)化
7 設(shè)置和獲取cookie
#coding:utf8
# 導(dǎo)入flask
from flask import Flask,abort,redirect,make_response,request
from werkzeug.routing import BaseConverter
# Flask 接受一個參數(shù)__name__ 作用是指明應(yīng)用的位置
app = Flask(__name__)
'''
1 建立一個前后臺鏈接
裝飾器的作用是陸游映射到視圖函數(shù)index
訪問根目錄就會進入index視圖函數(shù)
'''
@app.route('/')
def index():
# 返回后會調(diào)用make_response
return "你好 世界!"
'''
2 給路由傳參數(shù)
傳遞的參數(shù)在<name>當(dāng)中 這個變量名稱也要傳遞給視圖函數(shù)
可以在<int:name> 或者<string:name> 指定傳遞參數(shù)的類型
不指定類型默認使用string類型
'''
@app.route('/attr/<string:attr>')
def attr(attr):
return "hello,%s"%attr
'''
3 返回網(wǎng)絡(luò)狀態(tài)碼的兩種方式
01 return 字符串,狀態(tài)碼
02 abort(狀態(tài)碼)
200 成功
300 重定向
404 未找到
500 服務(wù)器內(nèi)部錯誤
'''
#01 return 字符串,狀態(tài)碼 這種方式 可以返回不存在的狀態(tài)碼 前端依然能得到頁面
@app.route('/status')
def status():
# 用這種方式可以返回假的狀態(tài)碼 前端依然能夠渲染
return 'hello status',999
#02 利用abort(狀態(tài)碼) 進行返回狀態(tài)碼,只能寫入真的狀態(tài)碼
# 這個函數(shù)的作用是 自定義我們項目的 出錯頁面
@app.route('/abort')
def geive500():
abort(500)
'''
4 捕獲訪問我們flask后臺發(fā)生各種錯誤的情況
利用@app.errorhandler(500) 進行裝飾 能截獲500的response
'''
# 捕獲500異常 函數(shù)當(dāng)中接受到錯誤信息
@app.errorhandler(500)
def error500(e):
return "您請求的頁面后臺發(fā)生錯誤!錯誤信息:%s"%e
@app.errorhandler(404)
def error404(e):
return "您訪問的頁面飛去了火星!信息:%s"%e
'''
5 重定向
有兩種方式:
01 redirect(url)
02 url_for(視圖函數(shù))
'''
@app.route('/redirect')
def redir():
return redirect('http://www.baidu.com')
'''
6 url正則
兩個用途: 限制訪問 和 優(yōu)化訪問路徑
使用:
01首先要 定義一個繼承自BaseConverter的子類
在子類里面調(diào)用父類的初始化方法
重寫父類的變量
02然后 給applurl_map.converters 字典添加re健 和 我們自己寫的類做val
03最后 視圖函數(shù)的app.route('路徑<re(正則),變量名>')
變量名要傳給視圖函數(shù)做參數(shù)
'''
# 01 寫一個繼承自 BaseConverter的子類 相應(yīng)的方法和屬性要重寫
class Regex_url(BaseConverter):
def __init__(self,url_map,*args):
super(Regex_url,self).__init__(url_map)
self.regex = args[0]
# 02 添加re映射
app.url_map.converters['re'] = Regex_url
# 03 正則匹配參數(shù)
# 利用正則對傳入?yún)?shù)進行限制
# 只有1到3位小寫英文才能成功 否則都是404
@app.route('/attr2/<re("[a-z]{1,3}"):attr>')
def attr2(attr):
return "hello %s"%attr
'''
7 設(shè)置cookie 和 獲取 cookie
設(shè)置cookie:
利用 make_response() 拿到response對象
response.set_cookie(key,val)
獲取cookie:
利用request.cookies.get(key) 獲取cookie
'''
# 設(shè)置cookie
@app.route('/set_cookie')
def setCookie():
response = make_response('設(shè)置cookie')
response.set_cookie('log','設(shè)置的cookie')
return response
# 獲取cookie
@app.route('/get_cookie')
def getCookie():
log = request.cookies.get('log')
return log
if __name__ == '__main__':
# 執(zhí)行后臺服務(wù)器
app.run(debug=True)
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python入門與進階經(jīng)典教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
python標(biāo)準庫 datetime的astimezone設(shè)置時區(qū)遇到的坑及解決
這篇文章主要介紹了python標(biāo)準庫 datetime的astimezone設(shè)置時區(qū)遇到的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09

