Flask(重定向和错误响应 六)
redirect(重定向)实现方式
1 | from flask imports redirect |
源码
1 | def redirect(location, code=302, Response=None): |
- 重定向的
code
默认为302
- 我们传入的第一个参数
location
被放入到了response.headers["Location"]
中
浏览器处理工作:
- 先判断返回状态码是否为「30x」
- 查看返回的头信息中是否有
Location
字段,如果有则访问新的网址
重定向的两种方式
redirect(‘/new/url’)
不建议使用:url地址可能会发生变更,函数名变更比较少
redirect(url_for(‘endpoint’))
1 |
|
url_for
- 生成静态文件
1 | url_for('static',filename='style.css') |
例子:
1 | from flask import Flask, render_template |
templates/index.html
1 |
|
static/css/demo.css
1 | .p { |
http://127.0.0.1:5000/src/css/demo.css
可以看出,这个url变成了static_url_path
替换部分
- 跳转的时候添加参数
1 |
|
访问:http://127.0.0.1:5000/
会跳转到:http://127.0.0.1:5000/login?username=zhongxin
错误响应
没有任何处理的错误返回
1 | from flask import Flask, render_template |
处理500错误
1 |
|
使用官网定义的错误返回
1 | from flask import Flask, render_template, request, abort |
使用自己的html定义错误返回
1 | from flask import Flask, render_template, request, abort, make_response |
重写官方的404错误
1 | from flask import Flask, render_template, request, abort, make_response |
abort源码
1 | def abort(status, *args, **kwargs): |
其实就是调用Aborter
1 | class Aborter(object): |
执行的时候就是__call__
会抛出异常
其实,它就是抛出一个异常而已
自己创建错误信息类
1 | from flask import Flask, render_template, request |