zoukankan      html  css  js  c++  java
  • python全栈开发day111-flask路由及其参数,Flask配置,蓝图,几个装饰器、闪现、send_file、jsonify

    1.endpoint参数,解决视图函数重名问题(包括装饰后重名问题)

      http://www.cnblogs.com/eric-nirnava/p/endpoint.html

    • 每个应用程序app都有一个view_functions,这是一个字典,存储endpoint-view_func键值对。add_url_rule的第一个作用就是向view_functions中添加键值对(这件事在应用程序run之前就做好了)
    • 每个应用程序app都有一个url_map,它是一个Map类(具体实现在werkzeug/routing.py中),里面包含了一个列表,列表元素是Role的实例(werkzeug/routing.py中)。add_url_rule的第二个作用就是向url_map中添加Role的实例(它也是在应用程序run之前就做好了)
      {'static': <bound method _PackageBoundObject.send_static_file of <Flask 'myflask'>>, 'add.add': <function stu_add at 0x000000000399F0D0>, 'update.update': <function stu_update at 0x0000000003AC8730>, 'delete.delete': <function stu_delete at 0x0000000003AC8840>, 'reg.reg': <function View.as_view.<locals>.view at 0x0000000003934620>, 'hello_world': <function hello_world at 0x0000000003B1EA60>, 'login': <function login at 0x0000000003B1EAE8>, 'student_list': <function student_list at 0x0000000003B1EBF8>}
      Map([<Rule '/login' (POST, OPTIONS, GET, HEAD) -> login>,
       <Rule '/list' (POST, OPTIONS, GET, HEAD) -> student_list>,
       <Rule '/add' (POST, OPTIONS, GET, HEAD) -> add.add>,
       <Rule '/reg' (POST, OPTIONS, GET, HEAD) -> reg.reg>,
       <Rule '/' (OPTIONS, GET, HEAD) -> hello_world>,
       <Rule '/update/<sid>' (POST, OPTIONS, GET, HEAD) -> update.update>,
       <Rule '/delete/<sid>' (POST, OPTIONS, GET, HEAD) -> delete.delete>,
       <Rule '/static/<filename>' (OPTIONS, GET, HEAD) -> static>])
      View Code

    2.Flask中的路由配置

      @app.route("/<int:age>",methods=("get",),endpoint='xxx')
      动态路由参数<age>

    3.Flask的配置

      1) Flask的实例配置
        app.config.from_object(obj)
        class Obj:

          DEBUG=True,。。。、、

      2) Flask初始化配置
        app=Flask(__name__,template_folder.....)
        template_folder = "模板存放路径"  # 蓝图应用时在蓝图py文件在同一文件夹下
          static_folder = "静态文件存放路径"
        static_url_path = "/默认值是等于static_folder的名字" # 蓝图应用时path不能重复
        static_host .....

    4.蓝图(Blueprint)
      

      bp = Blueprint("bulename",__name__)   # 与Flask实例一样传参  

      @bp.route("/") 为蓝图添加路由 方式与Flask实例路由一毛一样

      注册蓝图
      app.register_blueprint(bule.bp)

    插拔机制

    5.装饰器before_request、aftert_request、errorhandler(404)
      

    @app.before_request 请求进入视图函数之前作出处理
    @app.after_request 请求结束视图函数之后,返回客户端之前,作出处理
    def after(response)
    return response

    be1-be2-af2-af1
    be1-af2-af1

    errorhandler(404) #定义错误请求的响应
    def err(code_or_exp)
      

    @app.errorhandler(404)
    def errors(code_or_exception):
        # print(dir(arg),arg.name,arg.get_description())
        return redirect("/login")
    
    # app.add_url_rule("/bo/<age>", methods=("GET", "POST"),endpoint="bofunc")
    errorhandler

    6.skip闪现(flash)

    @app.route("/index")
    def index():
        res = get_flashed_messages()
        if not res:
            res = [""]
        flash("你刚才访问了index")
        return render_template("index.html",msg=res[0])
    
    @app.route("/home")
    def index1():
        res = get_flashed_messages()
        if not res:
            res = [""]
        flash("你刚才访问了home")
        return render_template("index.html",msg=res[0])
    
    if __name__ == '__main__':
        app.run()
    flash

    7.sendfile jsonify
      

    1.form flask import send_file
    flask send_file 打开文件并返回
    send_file(文件路径)

    2.from flask import jsonify
    return jsonify({a:1})
    打包一个 content-Type:application/json 返回给客户端
    jsonify的配置在app["JSONIFY_MIMETYPE"] = ""

  • 相关阅读:
    HDU 2955 Robberies(01背包)
    HDU 2602 Bone Collector(01背包)
    HUST 1352 Repetitions of Substrings(字符串)
    HUST 1358 Uiwurerirexb jeqvad(模拟解密)
    HUST 1404 Hamming Distance(字符串)
    HDU 4520 小Q系列故事――最佳裁判(STL)
    HDU 2058 The sum problem(枚举)
    【破解】修改程序版权、添加弹窗
    HDU 1407 测试你是否和LTC水平一样高(枚举)
    HDU 1050 Moving Tables(贪心)
  • 原文地址:https://www.cnblogs.com/wuchenggong/p/9768564.html
Copyright © 2011-2022 走看看