Flask路由,配置,蓝图,中间件与异常装饰器,send_file与jsonify

Flask 第二部分

1.使用endpoint

  与Django路由的url函数的name类似

  router装饰器函数的endpoint参数,默认为视图函数名,可指定名称,用于反向解析,或解决视图函数重名问题

  反向解析:

    url_for()函数,传入路由关系名,返回路由地址,路由中有动态参数时,反向解析要以关键字方式传入参数值

2.flask中的路由

  参数:

  • 路由:字符串
    •   路由动态参数,
      • 不指定数据类型<参数名>
      • 指定数据类型<int:参数名>或者<string:参数名>
  • defaults:字典,键为路由参数名,设置路由参数的默认值
  • methods:可迭代对象,元素为请求方式,建议大写
  • endpoint:字符串,视图函数别名
  • redirect_to:/开头字符串,访问此路由时,不执行试图函数,直接跳转指定路由【状态码301】

@app.route("/<int:age>",methods=("GET",),endpoint="默认视图函数名")
动态路由参数"/<age>"

3.配置

1.Flask实例配置

  ①直接设置键值对

    例如app.DEBUG = True或者app['DEBUG'] = True

  ②通过config设置

    1)config设置键值对

      app.config['DEBUG'] = True

    2)通过配置类设置

      app.config.from_object(配置类名)

      class 配置类名:

        DEBUG = True

  注意:使用app.config或者配置类配置时DEBUG,SECRET_KEY等配置项全是大写

  app设置键值时secret_key为小写

 

  ps:dir()方法,查看对象的所有方法

2.Flask初始化配置(和蓝图接近)

    1. template_folder = "模板存放路径" ,默认为templates文件夹,# ;蓝图应用时,同一个文件夹
    2. static_folder = "静态文件存放路径",不设置默认为static文件夹
    3. static_url_path = “/前端引用静态文件的别名",以/开头,类似Django的‘/static/’,默认值是等于static_folder的名字" #蓝图应用时path不能重复【设置static_url_path,当文件夹路径发生变化时,前端不必修改,仍以此别名引用】

4.蓝图(Blueprint)

  通过插拔机制(注册蓝图,不注册蓝图)控制部分组件【路由+视图】的使用与否

  

  bp = Blueprint("bluename",__name__) # 类似Flask实例
  @bp.route("/") 为蓝图添加路由 方式与Flask实例路由一毛一样
  def index():

    return ''


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

5.三个装饰器

  类似Django的中间件

  @app.before_request,@app.after_request,

  @before_request,请求进入视图函数之前作出处理,返回none继续执行其他的before_request装饰的函数

  @after_request 请求视图函数结束之后,返回客户端之前,做出处理,返回response继续执行其他函数,

    如果before_request中断,会把所有after_request都执行一遍

  @errorhandler(404)

  def error(code_or_exp):

    return redirect('/')

6.flash

  全局flash占用极少内存,各视图函数之间通信 

 1 @app.route('/index')
 2 def index():
 3     flash('你刚才访问了index')
 4     return render_template('index.html')
 5 
 6 @app.route('/home')
 7 def index1():
 8     res=get_flashed_meddages()
 9     flash('你刚才访问了home')
10     return render_template('home.html',msg=res[0])
falsh的使用举例  

7. send_file和 jsonify

1.from flask import send_file

  send_file:视图函数的返回值之一,return send_file(文件路径)
  打开文件并返回给前端
  send_file(文件路径)

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

 

补充:多个装饰器时:

  route装饰器在上,其他装饰器在下

 

今日作业:
基于session before_request Blueprint 写一个学生管理 增删改 查:查询所有学生,查看单个学生的详细
扩展:pymysql

 

posted @ 2018-10-10 16:50  dmyHero  阅读(171)  评论(0)    收藏  举报