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"] = ""

  • 相关阅读:
    移动端阻止事件冒泡需要注意!
    JavaScript闭包
    JS原型与原型链终极讲解
    逐行分析jQuery源码
    jQuery源码分析-03构造jQuery对象-源码结构和核心函数
    screenX clientX pageX的区别
    JSON.stringify 语法实例讲解
    pipenv 简要指南
    webpy简单使用
    初识Dash -- 构建一个人人都能够轻松上手的界面,操控数据和可视化
  • 原文地址:https://www.cnblogs.com/wuchenggong/p/9768564.html
Copyright © 2011-2022 走看看