Flask入门flask-script 蓝本 钩子函数(三)
1 flask-script擴展庫
概念: 是一個flask終端運行的解析器 ,因為項目完成以后,代碼改動會有風險,所以借助終端完成不同啟動項的配置
安裝
pip3 install flask-script使用
from flask_script import Manager #導入 manager = Manager(app) #初始化flask運行的解析器 manager.run() #運行執行程序需要在啟動項輸入命令
python3 當前啟動文件名.py runserver 可選參數 可選參數如下: -h 主機名 -p 端口號 --threaded 開啟多線程 -d 開啟調試模式 -r 代碼修改后重新加載例如: python3 manage.py runserver -d -r -h127.0.0.1 -p5001 --threaded 參數全部加上2 Blueprint藍圖
概念 : Blueprint通過把實現不同功能的module分開,實現分類功能,從而把一個大的application分割成各自實現不同功能的module。在一個Blueprint中可以調用另一個blueprint的view function, 但要加相應的blueprint名。本質上來說就是讓程序更加松耦合,更加靈活,增加復用性,提高查錯效率.
導入
from flask import Blueprint,session使用 : 創建藍圖路由文件userinfo.py文件
from flask import Blueprintuser = Blueprint('user',__name__) @user.route('/login') def login():return 'login'注意 : 1 Blueprint接受兩個參數實例化,分別文藍本名與藍本所在的包與模塊2 藍本實質上也是一個命名空間在啟動文件中注冊藍本: app/__init__.py,一般在初始化時候注冊藍圖
from mysession import user app.register_blueprint(user) #app注冊藍本userapp.register_blueprint(user,url_prefix='/user') #在app中注冊藍本user,并添上前綴/user下面我們以一個具體例子說明: 假定一個文件系統
--app--main__init__.pyerrors.pyforms.pyviews.py__init__.py其中mian就是藍本模塊,錯誤信息保存在errors.py,視圖函數保存在views.py文件中(1) 創建藍本:
在文件app/main/__init__.py添加定義:
from flask import Blueprint main = Blueprint('admin',__name__) from . import views,errors注:1 通過實例化Blueprint類的對象創建一個藍本2 視圖與errors的導入應放在藍本創建之后,防止循環導入問題在文件app/main/views.py中添加視圖函數:
from . import main #當前目錄下導入藍本 from flask import render_template@main.route('/test/') def test():return render_template('main/test.html'),200 注: 1 跳轉到模板頁面test.html在文件app/main/errors.py中添加錯誤視圖函數:
from flask import render_template from app.main import main #導入藍本 #捕捉404狀態碼 @main.app_errorhander(404) def page_not_found(e):return render_tamplate('main/404.html'),404 #捕捉500狀態碼 @main.app_errorhander(500) def internal_server_error(e):return render_template('main/500.html'),500(2) 注冊藍本
在app/__init__.py中添加注冊藍本代碼
from app.main import main #導入藍本 app.register_blueprint(main,url_prefix='/admin')(3) 構造url路由
在view視圖中有函數test url_for('main.test') url_for('藍本名.視圖函數名')3 鉤子函數
類似于django中間件 在使用的時候需要使用裝飾器,使得 程序變成 A函數--->鉤子函數---->B函數,
flask項目中有個是應用上下文(app),一個是請求上下文(request),請求上下文request和應用上下文current_app都是一個全局變量。所有請求都共享的。Flask有特殊的機制可以保證每次請求的數據都是隔離的,即A請求所產生的數據不會影響到B請求。所以可以直接導入request對象,不會受到外界影響
兩個上下文一般包含4個屬性:
| before_first_request | 第一次請求之前 |
| before_request | 每次請求之前 |
| after_request | 每次請求之后 |
| teardown_request | 不管是否異常都會在請求之后執行 |
| context_processor | 上下文處理器,返回字典的健 |
| errorhandler | errorhandler接收狀態碼,可以自定義返回狀態碼的響應頁面 |
注 : 在藍本中使用鉤子函數需要進行轉化: @mysession.teardown_app_request 藍本名.teardown_app_request
4 g對象
g : 全局變量,需要導入使用 from flask import g
例如: 在提交表單中測試下 action='{{ url_for('login') }}' method='post'
login_user.html
<form action="{{ url_for('login') }}" method="post"><table><tr><td>用戶名:</td><td><input type="text" placeholder="請輸入用戶名" name="username"></td></tr><tr><td>密碼:</td><td><input type="text" placeholder="請輸入密碼" name="password"></td></tr><tr><td></td><td><input type="submit" value="登錄"></td></tr></table> </form>視圖函數utils.py中
from flask import g def login_username():return u'當前登錄用戶:{}'.format(g.username)def login_password():return u'當前密碼:{}'.format(g.password)在主文件視圖函數中views.py
from flask import Flask,g,request,render_template from utils import login_usernameapp = Flask(__name__)@app.route('/login/',methods=['GET', 'POST']) def login():if request.method == 'GET':return render_template('login.html')else:username = request.form.get('username')password = request.form.get('password')g.username = username #將username變成全局g對象信息存儲g.password = password #將password變成全局g對象信息存儲login_username()login_password()return u'登錄成功!'if __name__ == '__main__':app.run()轉載于:https://www.cnblogs.com/why957/p/9114088.html
總結
以上是生活随笔為你收集整理的Flask入门flask-script 蓝本 钩子函数(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++基础:之封装
- 下一篇: Class-dump