日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flask入门flask-script 蓝本 钩子函数(三)

發布時間:2025/3/15 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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個屬性:

  • request : 請求上下文的對象,一般用來保存一些請求的變量。比如method、args、form等。
  • session: 請求上下文的對象,一般用來保存一些會話信息.
  • current_app: 返回當前App
  • g: 全局變量,應用上下文的對象,處理請求時作為臨時存儲的對象 : g.message存儲信息
  • 鉤子函數功能描述
    before_first_request第一次請求之前
    before_request每次請求之前
    after_request每次請求之后
    teardown_request不管是否異常都會在請求之后執行
    context_processor上下文處理器,返回字典的健
    errorhandlererrorhandler接收狀態碼,可以自定義返回狀態碼的響應頁面

    注 : 在藍本中使用鉤子函數需要進行轉化: @mysession.teardown_app_request 藍本名.teardown_app_request

    4 g對象

    g : 全局變量,需要導入使用 from flask import g

  • g對象專門用來保存用戶數據的
  • 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 蓝本 钩子函数(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。