zoukankan      html  css  js  c++  java
  • flask的路由配置,特殊装饰器

    1,flask中的路由

    • endpoint-url_for反向地址
    • endpoint默认是视图函数名endpoint="雪雪"
    • methods 指定视图函数的请求方式,默认GET
    • default={"nid":1}指定视图函数的默认值
    • strict_slashes = False 是否严格遵循路由规则/login/
    • redirect_to"/xueren/" 永久跳转地址301
    • 动态路由参数
    • /<int:nid> / <string:str> / <nid>
    • 视图函数中需要有参数接收动态参数

    2,Flask中的实例化配置

    • template_folder = "temp"  # template模板目录,默认当前项目中的template目录
    • static_folder = "xuexue"目录
    • static_url_path= "/static"   # 访问路径
    • host_matching = False  # 如果不是特别需要,慎用,否则所欲的route都需要host=""参数
    • subdomain_matching = False  # 理论上来说是用来限制SERVER_NAME子域名,
    • instance_path = None.  # 指向另一个Flask实例的路径
    • instance_relative_config = Flase  # 是否加载另一个实例的配置
    • root_path = None  # 主模块所在的目录绝对路径,默认项目目录

    3,app对象配置

    • app.config.from_object(Debug)
    • class Debug(object):
      • DEBUG = true

    4,Blueprint

    • from flask import Blueprint
    • blue = Blueprint("blue_id", __name__,url_prefix="user"每次访问蓝图的路径前缀)
    • app.reguster_blueprint(blue)

    5,特殊装饰器:

    • @app.template_global()
    • @app.template_filter()
    • @app.before_request      # 请求进入视图函数之前
    • @app.after_request
    • def af1(response)
      • return response        # 结束视图函数之后, 返回客户端之前
    • 正常:be1---be2---be3---af3---af2---af1
    • 异常:be1---af3---af2---af1
    • @app.errorhandler(404)重定义页面
    • def error404(args):
      • return args
    • 基于蓝图实现增删改查数据,基于Before_request session实现用户校验,可选errorhandler

    具体代码如下:

    蓝图代码:

    from flask  import Flask, request, render_template, redirect, session
    from serv import users
    import weishenme
    app = Flask(__name__, static_url_path="/static")
    
    # 注册配置类
    app.config.from_object(weishenme.Debug)
    
    # 注册蓝图
    app.register_blueprint(users.user_blue)
    
    
    @app.route("/detail")
    def detail():
        return render_template("detail.html")
    
    @app.route("/login", methods=["GET", "POST"])
    def login():
        if request.method == "GET":
            return render_template("login1.html")
        else:
            session["user"] = request.form.get("user")
            return redirect("/")
    
    @app.route("/")
    def xiaocai():
        return "骚帆是一根小菜"
    
    
    
    if __name__ == '__main__':
        app.run(debug=True)

    配置类:

    class Debug(object):
        DEBUG=True
        SECRET_KEY="xuexue"
        SESSION_COOKIE_NAME="xiaoxue"
    
    
    class Testing(object):
        TESTING=True
        SECRET_KEY="xiaopangpang"
        SESSION_COOKIE_NAME="xueer"
    
    
    class Production(object):
        SECRET_KEY="xueren"
        SESSION_COOKIE_NAME="csrf_token"

    app的代码:

    from flask import Flask, session, redirect, url_for, render_template, request
    import weishenme
    # 实例化一个Flask对象app
    app = Flask(__name__)  # __name__表示是当前目录
    # 指定session的key是xuexue
    app.secret_key = "xuexue"
    
    # 注册配置类
    # app.config.from_object(weishenme.Debug)
    app.config.from_object(weishenme.Testing)
    
    # 装饰器
    def outer(func):
        def hahaha(*args, **kwargs):
            if session["user"]:
                print(session["user"])
                ret = func(*args, **kwargs)
                return ret
            else:
                return redirect("/login")
        return hahaha
    
    
    @app.route("/<nid>", endpoint="wc", methods=["GET", "POST"])
    @outer
    def wc(nid):
        print(nid)
        return render_template("xuexue.html")
    
    
    @app.route("/detail", endpoint="detail")
    @outer
    def detail():
        print("detail")
        return render_template("detail.html")
    
    
    @app.route("/login", methods=["GET", "POST"], strict_slashes=False)
    def login():
        if request.method == "GET":
            return render_template("login1.html")
        else:
            session["user"] = request.form.to_dict().get("user")
            return redirect("/miss")
    
    
    if __name__ == '__main__':
    
        # 运行这个flask项目
        app.run(host="0.0.0.0", port=2018)

    请求执行流程代码:

    from flask import Flask, request, session, render_template, redirect, session
    import weishenme
    from serv import users
    
    app = Flask(__name__, static_folder="static_list",  static_url_path="/static")
    # 到瑞配置类
    app.config.from_object(weishenme.Debug)
    # 注册蓝图
    app.register_blueprint(users.user_blue)
    
    @app.before_request
    def is_login():
        print("b1")
        if request.path == "/login" :
            return None
        elif session.get("user"):
            return None
        else:
            return redirect("/login")
    
    @app.before_request
    def b2():
        print("b2")
        return None
    
    @app.before_request
    def b3():
        print("b3")
        return None
    
    
    @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("/", endpoint="index",methods=["POST", "GET"])
    def index():
        return render_template("index1.html")
    
    @app.route("/detail", endpoint="detail")
    def detail():
        return render_template("detail.html")
    
    @app.route("/login", methods=["GET", "POST"], strict_slashes=False)
    def login():
        if request.method == "GET":
            return render_template("login1.html")
        else:
            print("xiaoxue")
            session["user"] = request.form.get("user")
            return redirect("/")
    
    @app.errorhandler(404)
    def error(args):
        print(args)
        return "您访问的页面不存在,或者走丢了.....%s" % args
    
    
    if __name__ == '__main__':
        app.run(debug=True)

      

  • 相关阅读:
    UVA 110 Meta-Loopless Sorts(输出挺麻烦的。。。)
    使用bash判断PATH中是否存在某个路径
    Palindrome(poj3974)(manacher算法)
    Highcharts简介
    android 4.3源码编译
    Unsupervised Feature Learning and Deep Learning(UFLDL) Exercise 总结
    借助Ant工具,实现快速开发
    关于tableView的简单实例
    Matlab单元(Cell)数据的应用
    spring 资源加载使用说明
  • 原文地址:https://www.cnblogs.com/ljc-0923/p/10265389.html
Copyright © 2011-2022 走看看