flask的路由

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask的路由相关的知识,希望对你有一定的参考价值。

参考技术A 在flask应用中,路由是指用户请求的URL和视图函数之间的映射。flask框架会根据http请求的URL在路由表当中,匹配预定义的URL规则,找到对应的视图函数,并将视图函数的执行结果返回WSGI服务器

route装饰器 :可以使用Flask应用实例的route装饰器将一个URL规则绑定到 一个视图函数上

结果

可以看到,由于hello2函数路径和请求方式和hello1一样,会被hello1覆盖掉,所以在访问的时候只会执行hello1,并不会执行hello2

修改两个视图函数的请求方式:

修改之后再次访问

可以看到这次访问/hello是访问到了hello2函数,因为访问页面的默认方式是get请求。尽管现在hello1和hello2路径相同,但是现在请求方式不一致,是看成单独的逻辑

上面讲了不同视图函数使用同一装饰器的情况,那如果反过来,同一个视图函数上面有不同的装饰器呢?

对/h1和/h2都分别进行访问

可以看到无论是访问h1还是h2,都是访问到同一个页面,实现了两个不同的URL对应同一个视图函数。

在访问页面的时候经常会出现重定向的操作,比如在网上进行购物的时候,无论是下单结算,或者是查看商品物流的过程,都是需要确定好用户是已经登录的情况下才能进行操作的,如果是没有登录就会先跳转到登录页面才能执行上面的操作,那么在flask中如何进行重定向呢?

首先要在flask中导入重定向的函数

定义要进行重定向的视图函数

或者也可以使用flask中的方法url_for(这个也是需要在上面进行导入)

这个方式是获取到函数名之后,自行找到对应的访问路径进行解析并返回。这个方法可以避免把路径写死,如果到后面路径需要进行调整的时候就不需要再对路径进行修改,减少了很多工作量

当我们访问login的时候

然而在按下回车键之后,最终的展示页面却跳转到了hello2函数的页面当中

转换器有下面几种

接下来使用一个int转换器获取URL当中的ID并且返回到页面当中进行显示。

注意转换器的使用格式为:<转换器类型:参数名称>

注意:视图函数里的参数和装饰器里面的参数名要一致

可以看到通过这样的方式获取到了URL当中的数值123并且在页面当中展示出来

Flask - 路由

什么是路由

处理url和函数之间的关系的程序就是"路由"

在Flask中,路由是通过@app.route装饰器来表示的

@app.route('/login')
def login():
    pass

不带参数的路由

http://localhost:5000/admin/login

@app.route('/admin/login')
def admin_login():
    return "xxx"

带参数的路由

  1. 基本带参路由

    参数用<>来表示

    @app.route('/show/<name>')
    def show(name):
        # name 参数表示的就是由地址栏上传递进来的数据
        pass
  2. 带多个参数的路由

    多个参数使用/隔开,并继续使用<>来表示

    @app.route('/show/<name>/<age>')
    def show(name,age):
        pass
  3. 指定参数类型的路由

    使用类型转换器 解决参数类型的问题

    @app.route('/show/<name>/<int:age>')
    def show(name,age):
        print('name:字符串类型的数据')
        print('age:整数类型的数据')
        print('int:类型转换器')
        pass
    类型转化器 作用
    缺省 字符串,不能有斜杠(‘/‘)
    int: 整数
    float: 浮点型
    path: 字符串,允许有斜杠(‘/‘)

多 URL 的路由匹配

@app.route('/地址1')
@app.route('/地址2')
... ...
def index():
    return 'xxx'

路由中设置允许接收的HTTP请求方法

所有的路由默认只接受get请求,不接受post请求

@app.route('/xxx',methods=['POST','GET'])
@app.route('/xxx',methods=['POST'])

URL的反向解析

正向解析:程序自动解析,会根据访问路径(@app.route(‘xxx‘)),自动来匹配处理函数

反向解析:通过视图处理函数的名称自动生成对应的访问路径

在Flask中要实现反向解析的话,需要导入url_for

from flask import url_for
url_for(funName,args)

funName:要生成地址所对应的函数名

args:该地址中要用到的参数

以上是关于flask的路由的主要内容,如果未能解决你的问题,请参考以下文章

doraemon的python Flask框架 路由和配置

小白学flask之路由,反向路由,路由参数

Flask - 路由

flask的路由

flask路由

Flask之三:路由