閃現, 請求擴充套件, 藍圖, 中介軟體(瞭解)
目錄
- 閃現
- 請求擴充套件
- 中介軟體(瞭解)
- 藍圖
9.閃現(message)
-設定:flash('aaa')
-取值:get_flashed_message()
-假設在a頁面操作出錯,跳轉到b頁面,在b頁面顯示a頁面的錯誤資訊
示例:
from flask import Flask,flash,get_flashed_messages,request,redirect
app = Flask(__name__)
app.secret_key = 'asdfasdf'
@app.route('/index')
def index():
# 從某個地方獲取設定過的所有值,並清除。
val = request.args.get('v')
if val == 'oldboy':
return 'Hello World!'
flash('超時錯誤',category="x1")
return "ssdsdsdfsd"
# return redirect('/error')
@app.route('/error')
def error():
"""
展示錯誤資訊
:return:
"""
data = get_flashed_messages(category_filter=['x1'])
if data:
msg = data[0]
else:
msg = "..."
return "錯誤資訊:%s" %(msg,)
if __name__ == '__main__':
app.run()
10.請求擴充套件
1 before_request
類比django中介軟體中的process_request,在請求收到之前繫結一個函式做一些事情
#基於它做使用者登入認證
@app.before_request
def process_request(*args,**kwargs):
if request.path == '/login':
return None
user = session.get('user_info')
if user:
return None
return redirect('/login')
2 after_request
類比django中介軟體中的process_response,每一個請求之後繫結一個函式,如果請求沒有異常
@app.after_request
def process_response1(response):
print('process_response1 走了')
return response
3 before_first_request
第一次請求時,跟瀏覽器無關
@app.before_first_request
def first():
pass
4 teardown_request
每一個請求之後繫結一個函式,即使遇到了異常
@app.teardown_request
def ter(e):
pass
5 errorhandler
路徑不存在時404,伺服器內部錯誤500
@app.errorhandler(404)
def error_404(arg):
return "404錯誤了"
6 template_global
標籤
@app.template_global()
def sb(a1, a2):
return a1 + a2
#{{sb(1,2)}}
7 template_filter
過濾器
@app.template_filter()
def db(a1, a2, a3):
return a1 + a2 + a3
#{{ 1|db(2,3)}}
總結:
1 重點掌握before_request和after_request,
2 注意有多個的情況,執行順序
3 before_request請求攔截後(也就是有return值),response所有都執行
11 中介軟體(瞭解)
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World!'
# 模擬中介軟體
class Md(object):
def __init__(self,old_wsgi_app):
self.old_wsgi_app = old_wsgi_app
def __call__(self, environ, start_response):
print('開始之前')
ret = self.old_wsgi_app(environ, start_response)
print('結束之後')
return ret
if __name__ == '__main__':
#把原來的wsgi_app替換為自定義的
app.wsgi_app = Md(app.wsgi_app)
app.run()
12.藍圖
對程式進行目錄結構劃分
不使用藍圖,自己分檔案
目錄結構:
-templates
-views
-__init__.py
-user.py
-order.py
-app.py
app.py
from views import app
if __name__ == '__main__':
app.run()
init.py
from flask import Flask,request
app = Flask(__name__)
#不匯入這個不行
from . import account
from . import order
from . import user
user.py
from . import app
@app.route('/user')
def user():
return 'user'
order.py
from . import app
@app.route('/order')
def order():
return 'order'
使用藍圖之中小型系統
詳見程式碼:pro_flask_簡單應用程式目錄示例.zip
目錄結構:
-flask_pro
-flask_test
-__init__.py
-static
-templates
-views
-order.py
-user.py
-manage.py
_init.py
from flask import Flask
app=Flask(__name__)
from flask_test.views import user
from flask_test.views import order
app.register_blueprint(user.us)
app.register_blueprint(order.ord)
manage.py
from flask_test import app
if __name__ == '__main__':
app.run(port=8008)
user.py
from flask import Blueprint
us=Blueprint('user',__name__)
@us.route('/login')
def login():
return 'login'
order.py
from flask import Blueprint
ord=Blueprint('order',__name__)
@ord.route('/test')
def test():
return 'order test'
使用藍圖之大型系統
詳見程式碼:pro_flask_大型應用目錄示例.zip
總結:
1 xxx = Blueprint('account', name,url_prefix='/xxx') :藍圖URL字首,表示url的字首,在該藍圖下所有url都加字首
2 xxx = Blueprint('account', name,url_prefix='/xxx',template_folder='tpls'):給當前藍圖單獨使用templates,向上查詢,當前找不到,會找總templates
3 藍圖的befort_request,對當前藍圖有效
4 大型專案,可以模擬出類似於django中app的概念
相關文章
- JWT 擴充套件具體實現詳解JWT套件
- 使用中介軟體記錄Laravel慢請求Laravel
- Express基礎瞭解—中介軟體Express
- flask路由系統、偏函式、CBV、模板、請求響應、session、請求擴充套件Flask路由函式Session套件
- .NET Core中介軟體的註冊和管道的構建(2)---- 用UseMiddleware擴充套件方法註冊中介軟體類套件
- 可擴充套件的資料庫系統,請求批評套件資料庫
- ASP.NET Core擴充套件庫之Http請求模擬ASP.NET套件HTTP
- Laravel5.0 限制請求頻率中介軟體Laravel
- jwt-auth中介軟體失效,請求幫助JWT
- ASP.NET Core - 請求管道與中介軟體ASP.NET
- 瞭解 OPcache 擴充opcache
- 如何使用Zebee構建高度可擴充套件的分散式工作流中介軟體?套件分散式
- Android 擴充套件 OkHttp 支援請求優先順序排程Android套件HTTP
- web前端雜記:深入瞭解原理,擴充套件學習Web前端套件
- 圖解Dubbo,6 種擴充套件機制詳解圖解套件
- JMeter擴充套件Java請求實現WebRTC本地音視訊推流壓測指令碼JMeter套件JavaWeb指令碼
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 【軟體架構篇】常見可擴充套件模式架構套件模式
- 如何利用容器與中介軟體實現微服務架構下的高可用性和彈性擴充套件微服務架構套件
- .NET Core中介軟體的註冊和管道的構建(3) ---- 使用Map/MapWhen擴充套件方法套件
- 使用django 中介軟體在所有請求前執行功能Django
- .net core 一個避免跨站請求的中介軟體
- [擴充套件推薦]簡體轉繁體/繁體轉簡體 OpenCC-PHP 擴充套件套件PHP
- [外掛擴充套件]多圖上傳欄位擴充套件MultiImages0.4套件
- 擴充套件JAAS,XMLPolicyFile實現套件XML
- [外掛擴充套件]圖片牆套件
- [外掛擴充套件]邀請碼外掛套件
- WCF擴充套件:行為擴充套件Behavior Extension套件
- 使用 Guzzle 中介軟體進行優雅的請求重試
- ASP.NET Core中介軟體計算Http請求時間ASP.NETHTTP
- 中介軟體:還在使用trim過濾請求引數嗎?
- Laravel最佳實踐 -- API請求頻率限制(Throttle中介軟體)LaravelAPI
- Solon詳解(六)- Solon的校驗擴充套件框架使用與擴充套件套件框架
- XML 實體擴充套件攻擊XML套件
- 平穩擴充套件:可支援RevenueCat每日12億次API請求的快取套件API快取
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- CONNECT BY 擴充套件用法,實現獲取bom級聯擴充套件數量套件
- PHP 系統樹圖擴充套件元件PHP套件元件