Flask藍圖Blueprint和特殊裝飾器

Flask 中的 藍圖 Blueprint

不能被run的flask實例;至關於django中的app01 應用html

藍圖做用:功能隔離 路由隔離python

Blueprint就是 一個不能run的flaskdjango

藍圖的名稱app01user 必須保證在app中是惟一flask

url_prefix 是url前綴;用於隔離相同urlsession

# blueprint.py
from flask import Flask
app = Flask(__name__)
app.debug = True

# 創建藍圖註冊  必定要註冊
from app01.views import user as app01_user
from app02.views import user as app02_user

app.register_blueprint(app01_user)
app.register_blueprint(app02_user)


if __name__ == '__main__':
    app.run()

app01app

from flask import Blueprint, render_template

# Blueprint就是 一個不能run的flask

# 藍圖的名稱app01user 必須保證在app中是惟一
user = Blueprint("app01user", __name__, template_folder="app01/templates/", url_prefix="/admin")  # url_prefix是url前綴;用於隔離相同url


@user.route('/login')
def login():
    # return "i am app01 blueprint"
    return render_template("login.html")

app02函數

from flask import Blueprint, render_template

# Blueprint就是 一個不能run的flask
user = Blueprint("app02user", __name__, url_prefix="/shopping")  # url_prefix


@user.route('/login')
def login():
    return "i am app02 blueprint"
# return render_template('login.html')

藍圖結構

  • 項目文件下分別建立manage.py 建立app01目錄;
  • 在app01目錄下分別建立views文件夾、static文件夾、templates文件夾、init.py、models.py
  • views 文件夾下建立藍圖 blueprint
# __init__,py
from flask import Flask
from app01.views.blueptrint import user #導入藍圖
def create_app():
    app = Flaks(__name__)
    app.congig['DEBUG'] = True
    
    # 註冊藍圖
    app.register_blueprint(user)
    
    # 將app返回
    return app
# manage.py
# 導入app 實例
from app01 import create_app
app = create_app()

# 運行
if __name__ = '__main__'
    app.run()
# views 下 建立藍圖 blueprint
from flask import Blueprint
# 藍圖實例 user爲藍圖名稱
user = Blueprint("user" , __name__)

@user.route("/login")
def login():
    return "ok 200"

此時就能夠運行manage.py文件了;或者Terminal下執行命令 python manage.py運行。url

Flask 特殊裝飾器

  • @app.before_request 請求進入視圖函數以前debug

  • @app.after_request 請求結束,返回影響客戶端以前code

    正常 be1 - be2 - be3 - vf - af3 - af2 - af1
    異常 be1 - be2 - af3 - af2 - af1

  • @app.errorhandler(4xx or 5xx) 重定義錯誤信息

from flask import Flask, request, session, redirect, render_template
from functools import wraps

app = Flask(__name__)
app.secret_key = "!@#$%^&*()"
USER = {"username": "anwen"}


# def wrapper(func):
#   @wraps(func)
#   def inner(*args, **kwargs):
#       if session.get("user"):
#           ret = func(*args, **kwargs)
#           return ret
#       else:
#           return redirect("/login")
#
#   return inner


@app.before_request
def be1():
    print("be1")


@app.before_request
def be2():
    print("be2")
    if request.path == "/login":
        return None
    if session.get("user"):
        return None
    else:
        return redirect("/login")


@app.before_request
def be3():
    print("be3")


@app.after_request
def af1(res):
    print("af1")
    return res


@app.after_request
def af2(res):
    print("af2")
    return res


@app.after_request
def af3(res):
    print("af3")
    return res


@app.route('/login', methods=["GET", "POST"])
# @wrapper
def login():
    if request.method == 'GET':
        return render_template("login.html")
    else:
        if request.form.get("username") == USER["username"]:
            session['user'] = request.form.get("username")
            return redirect('/index')


@app.route("/index")
# @wrapper
def index():
    print("我是視圖函數index")
    return render_template("index.html")


@app.route("/index1")
# @wrapper
def index1():
    return render_template("index.html")


@app.route("/index2")
# @wrapper
def index2():
    return render_template("index.html")


@app.errorhandler(404)
def error404(ErrorMessage):
    print(ErrorMessage)
    return redirect("https://www.autohome.com.cn/beijing/asdfe32r24rff23r23r")
    # return send_file("image/1.jpg")


if __name__ == '__main__':
    app.run()
相關文章
相關標籤/搜索