Flask基础2 蓝图,实例化配置,app对象配置,特殊装饰器

实例化Flask时的参数

from flask import Flask,request,session,render_template,redirect,url_for,send_file
import setting
app = Flask(__name__,template_folder="temp",static_folder="jingtaiwenjianmulu",static_url_path="/static")
# app.secret_key = "jinwangbaMD5de"
# app.config["SECRET_KEY"] = "jinwangbaMD5de"
# app.config
# app.session_cookie_name = "qishiwoyebuzhidaozheshishenmedongxi"

app.config.from_object(setting.Debug)
# app.config.from_object(setting.XianShang)
# app.config.from_object(setting.Testing)

def wai(func):
    def neibuhanshu(*args,**kwargs):
        if session.get("user"):
            ret = func(*args,**kwargs)
            return ret
        else:
            return redirect("/login")
    return neibuhanshu

# @app.route("/static/<filename>")
# def get_static(filename):
#     # falsk -> static_folder ->
#     return send_file("statics/" + filename)


@app.route("/<nid>",endpoint="index",methods=["POST","GET"])
# @wai
def index(nid): # wai(index) -> neibuhanshu -> () endpoint 默认视图函数名
    # print(url_for("neibuhanshu"))
    # print(url_for("neibuhanshu"))
    # print(url_for("qishijiushiyigexiangxiyemian"))
    # print(nid)
    return render_template("index.html")

@app.route("/detail",endpoint="detail")
# @wai
def detail(): # wai(detail) -> neibuhanshu -> ()
    return render_template("detail.html")


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





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

 蓝图

users.py文件中:不能app.run
from flask import Blueprint,render_template

users_blue = Blueprint("users",__name__,template_folder="user_temp",url_prefix="/user")

@users_blue.route("/user_add") #/user/user_add
def user_add():
    return render_template("user_add.html")
使用时记得注册:通过蓝图中的路由访问,
app_blue.py文件中:

from flask import Flask,request,session,render_template,redirect,url_for,send_file
import setting
from serv import users
app = Flask(__name__,template_folder="temp",static_folder="jingtaiwenjianmulu",static_url_path="/static")
app.config.from_object(setting.Debug)

app.register_blueprint(users.users_blue)

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

 before_request 和 after_request:

执行顺序:

正常:be1 - be2 - be3 - af3 - af2 - af1 
异常:be1 - af3 - af2 - af1
from flask import Flask,request,session,render_template,redirect,url_for,send_file
import setting
from serv import users
app = Flask(__name__,template_folder="temp",static_folder="jingtaiwenjianmulu",static_url_path="/static")
app.config.from_object(setting.Debug)

app.register_blueprint(users.users_blue)

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

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

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

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

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

@app.route("/",endpoint="index",methods=["POST","GET"])
def index(): # wai(index) -> neibuhanshu -> () endpoint 默认视图函数名
    return render_template("index.html")

@app.route("/detail",endpoint="detail")
def detail(): # wai(detail) -> neibuhanshu -> ()
    return render_template("detail.html")


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

@app.errorhandler(404)
def error404(args):
    print(args)
    return "您访问的页面不存在或者走丢了,,,,,,%s"%(args)

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

 app对象配置:

class Debug(object):
    DEBUG=True
    SECRET_KEY="jinwangba"
    SESSION_COOKIE_NAME = "jinwangba's session"

class Testing(object):
    TESTING=True
    SECRET_KEY="yinwangba"
    SESSION_COOKIE_NAME = "yinwangba's session"
    
class XianShang(object):
    SECRET_KEY = "KingEight"
    SESSION_COOKIE_NAME = "CSRF_TOKEN"
使用:
        app.debug = True
        app.config["DEBUG"]=True
        
        class FlaskSetting(object):
            DEBUG = True
        
        app.config.from_object(FlaskSetting)
原文地址:https://www.cnblogs.com/shuai1993/p/10151773.html