閃現, 請求擴充套件, 藍圖, 中介軟體(瞭解)
目錄
- 閃現
- 請求擴充套件
- 中介軟體(瞭解)
- 藍圖
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套件
- flask路由系統、偏函式、CBV、模板、請求響應、session、請求擴充套件Flask路由函式Session套件
- 使用中介軟體記錄Laravel慢請求Laravel
- 可擴充套件的資料庫系統,請求批評套件資料庫
- ASP.NET Core擴充套件庫之Http請求模擬ASP.NET套件HTTP
- Express基礎瞭解—中介軟體Express
- Laravel5.0 限制請求頻率中介軟體Laravel
- jwt-auth中介軟體失效,請求幫助JWT
- ASP.NET Core - 請求管道與中介軟體ASP.NET
- 瞭解 OPcache 擴充opcache
- 如何使用Zebee構建高度可擴充套件的分散式工作流中介軟體?套件分散式
- 圖解Dubbo,6 種擴充套件機制詳解圖解套件
- web前端雜記:深入瞭解原理,擴充套件學習Web前端套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- JMeter擴充套件Java請求實現WebRTC本地音視訊推流壓測指令碼JMeter套件JavaWeb指令碼
- 如何利用容器與中介軟體實現微服務架構下的高可用性和彈性擴充套件微服務架構套件
- 【軟體架構篇】常見可擴充套件模式架構套件模式
- [外掛擴充套件]多圖上傳欄位擴充套件MultiImages0.4套件
- [擴充套件推薦]簡體轉繁體/繁體轉簡體 OpenCC-PHP 擴充套件套件PHP
- 使用django 中介軟體在所有請求前執行功能Django
- [外掛擴充套件]圖片牆套件
- [外掛擴充套件]邀請碼外掛套件
- 如何開發一個 SAP UI5 Tools 的自定義中介軟體擴充套件 - Custom Middleware ExtensionUI套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- Solon詳解(六)- Solon的校驗擴充套件框架使用與擴充套件套件框架
- 平穩擴充套件:可支援RevenueCat每日12億次API請求的快取套件API快取
- Laravel最佳實踐 -- API請求頻率限制(Throttle中介軟體)LaravelAPI
- 使用 Guzzle 中介軟體進行優雅的請求重試
- ASP.NET Core中介軟體計算Http請求時間ASP.NETHTTP
- 中介軟體:還在使用trim過濾請求引數嗎?
- PHP 系統樹圖擴充套件元件PHP套件元件
- 雜湊表擴充套件—點陣圖套件
- Istio Proxy【Envoy擴充套件】詳解套件
- PostgreSQL 原始碼解讀(248)- HTAB動態擴充套件圖解#2SQL原始碼套件圖解
- PostgreSQL 原始碼解讀(247)- HTAB動態擴充套件圖解#1SQL原始碼套件圖解
- 擴充套件工具套件
- Sanic 擴充套件套件
- Mybatis擴充套件MyBatis套件