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初始化配置(和蓝图接近)
- template_folder = "模板存放路径" ,默认为templates文件夹,# ;蓝图应用时,同一个文件夹
- static_folder = "静态文件存放路径",不设置默认为static文件夹
- 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])
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

浙公网安备 33010602011771号