Flask 基本路线

示例

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错误。