相对于Django的URL路由设置来讲,Flask配置的方式有较多的不一样。 下面来根据几个示例,来看看有什么地方不一样。flask
示例以下:浏览器
Flask的路由能够经过视图函数的修饰器@app.route()
来配置访问url。 在Django中能够在urls.py
中查看全部视图的url信息,那么Flask如何查看全部视图url的信息呢?bash
能够看到日志中打印出了url的信息。app
在Flask的视图配置了url以后,默认是只支持GET请求的。若是须要处理POST请求,则须要使用methods参数设置一下。函数
# 经过methods设置GET\POST请求
@app.route('/post_only', methods=["POST"])
def post_only():
return "post only page"
复制代码
在浏览器访问: http://127.0.0.1:5000/post_onlypost
能够看到不容许GET请求。那么下面来给这个视图再设置容许GET请求。测试
# 经过methods设置GET\POST请求
@app.route('/post_only', methods=["GET","POST"])
def post_only():
return "post only page"
复制代码
再次访问 http://127.0.0.1:5000/post_onlyui
能够看到GET请求可否正常访问了。url
在同一个url路由的请求下,能够会有GET\POST\DELETE\PUT等多个不一样的业务处理。 那么就须要使用不一样的视图函数来区分处理。spa
@app.route('/hello', methods=["GET"])
def hello_get():
return "hello_get"
@app.route('/hello', methods=["POST"])
def hello_post():
return "hello_post"
复制代码
从结果来看,同一个url下,根据配置不一样的method,则能够设置到不一样的视图函数进行业务处理。
一个视图如何定义多个url进行访问? 在Django中只要在urls.py
中设置多行url定义便可,而在Flask中只须要使用多个路由修饰器进行定义。
# 一个视图设置多个URL
@app.route('/diff_url1')
@app.route('/diff_url2')
def diff_url():
return "diff url"
复制代码
相似于Django在设置转发url的时候不会直接去写死路径,而是使用url设置的name值来进行url反向解析。 在Flask中则能够使用url_for
来进行反向解析,而Flask的视图函数不须要设置name,而是直接使用视图函数的函数名便可。
from flask import redirect, url_for
@app.route('/hello', methods=["GET"])
def hello_get():
return "hello_get"
# 使用url_for进行反向解析
@app.route('/url_for_test')
def url_for_test():
return redirect(url_for('hello_get'))
复制代码
测试访问 http://127.0.0.1:5000/url_for_test
能够看到页面自动跳转至 hello_get
的视图函数中。