一、视图支持的请求方法
flask默认的视图支持的请求方法只包括三种:
GET
HEAD
OPTIONS
其中HEAD
和OPTIONS
方法由Flask自动处理,如果不传参数,默认为GET
请求.
Q: 如何编写支持 POST 请求方法的函数?
答:在视图函数定义时候,在路由装饰器中可指定参数
methods
,methods
类型为List
,可以支持List
中包含的多个请求方法。
@app.route("/post_only", methods=['POST'])
def post_only():
return "post only page"
输出
Map([<Rule '/post_only' (OPTIONS, POST) -> post_only>,
...])
二、几种匹配情况
情况A:两个路由的Path一样,请求方式也一样
这种情况下,路由匹配时,按照app.url_map中列表路由的Path来的,根据Path对应的视图函数位置优先。
如果不理解,参考Django的路由优先匹配规则,匹配到了就执行这个视图函数,并且返回。
- 代码
@app.route('/hello')
def hello():
return 'hello1'
@app.route('/hello')
def hello2():
return 'hello2'
- 浏览器请求页面
情况B:路由一样,但是请求方式不一样
根据请求方式分发路由,不会出现位置优先,此时请求方法优先。
- 代码
@app.route('/hello', methods=["POST"])
def hello():
return 'hello1'
@app.route('/hello', methods=['GET'])
def hello2():
return 'hello2'
- 浏览器请求页面
三、Path不同,视图函数功能相同,如何添加多个Path?
Django中有时候会多个路径使用同一个视图函数,在urlpatterns直接调用方法即可。
flask中,只需要在视图函数的上面添加app.route
路由装饰器即可
- 代码示例
@app.route('/hi1')
@app.route('/hi2')
def hi():
return 'hi page'
这样就可以实现访问 /hi1
和 /hi2
时,都是调用的 hi
方法。
四、跳转到某个路径
Django:
- reverse:根据url别名解析路由
- redirect:跳转到某个url
Flask
- url_for:反解析,根据视图函数名字就可以解析路由
- redirect:跳转到某个url
举例
from flask import Flask, redirect, url_for
@app.route('/login')
def login():
# 使用url_for的函数,通过视图函数的名字找到视图对应的url路径
url = url_for("index")
return redirect(url)
注意:如果是路由不同,但是视图函数相同,方法也相同,优先返回离视图函数最近的路径
- 代码
from flask import Flask, redirect, url_for
@app.route('/hi1')
@app.route('/hi2')
def hi():
return 'hi page'
@app.route('/login')
def login():
# 使用url_for的函数,通过视图函数的名字找到视图对应的url路径
url = url_for("hi")
print(url)
return redirect(url)
输出
/hi2
网友评论