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>])
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)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
@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")
6.skip闪现(flash)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
@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()
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"] = ""