Flask中的路由可以使用routeFlask应用程序实例的装饰器来定义:
app = Flask(__name__) @app.route('/') def index(): return 'Hello Flask'
该route装饰需要一个字符串,它是相匹配的URL。当应用程序收到对与该字符串匹配的URL的请求时,将调用修饰的函数(也称为view function)。因此,对于约路线,我们将有:
@app.route('/about') def about(): return 'About page'
重要的是要注意,这些路由不是正则表达式,就像在Django中一样。
您还可以定义变量规则以将URL段值提取到变量中:
@app.route('/blog/posts/<post_id>') def get_blog_post(post_id): # look up the blog post with id post_id # return some kind of HTML
此处,可变规则位于URL的最后一段。URL的最后一个段中的任何值都将get_blog_post作为post_id参数传递给视图函数()。因此,请求/blog/posts/42将检索(或尝试检索)ID为42的博客文章。
重用URL也很常见。例如,也许我们想要/blog/posts返回所有博客文章的列表。因此,对于相同的视图功能,我们可以有两条路线:
@app.route('/blog/posts') @app.route('/blog/posts/<post_id>') def get_blog_post(post_id=None): # get the post or list of posts
在此,我们也必须提供的默认值,None为post_id在get_blog_post。当第一条路线匹配时,将没有值传递给视图函数。
另请注意,默认情况下,变量规则的类型为字符串。但是,您可以指定几种不同的类型,例如int和float通过为变量加上前缀:
@app.route('/blog/post/<int:post_id>')
Flask的内置URL转换器是:
string | Accepts any text without a slash (the default). int | Accepts integers. float | Like int but for floating point values. path | Like string but accepts slashes. any | Matches one of the items provided uuid | Accepts UUID strings
如果我们尝试/blog/post/foo使用无法转换为整数的最后一个URL段中的值访问该URL ,则应用程序将返回404错误。这是正确的操作,因为/blog/post最后一个段中没有带有和的规则。
最后,路由也可以配置为接受HTTP方法。的route装饰需要一个methods关键字参数是字符串表示该路由的HTTP可接受的方法的列表。如您所料,默认值GET仅为。如果我们有一个表单来添加新的博客帖子,并且想要返回GET请求的HTML并解析该请求的表单数据POST,则路由如下所示:
@app.route('/blog/new', methods=['GET', 'POST']) def new_post(): ifrequest.method== 'GET': # return the form elifrequest.method== 'POST': # get the data from the form values
在request被发现的flask包。请注意,在使用methods关键字参数时,我们必须明确说明要接受的HTTP方法。如果仅列出POST,则路由将不再响应GET请求并返回405错误。