当前位置 主页 > 网站技术 > 代码类 >

    flask框架url与重定向操作实例详解

    栏目:代码类 时间:2020-01-25 15:07

    本文实例讲述了flask框架url与重定向操作。分享给大家供大家参考,具体如下:

    1. url与函数的映射

    当我们新建一个flask项目的时候,默认就会有一个hello_world函数,如下面这样

    @app.route('/')
    def hello_world():
      return 'hello world'
    
    

    上面函数中,app.route()的参数就是我们的url,当我们启动项目的时候,我们在浏览器中输入127.0.0.1:5000,就能够访问到我们这个视图了,因为/就是代表"根url",所以我们只需要ip地址和端口就访问到了我们的这个函数视图。

    当我们将app.route()的参数改为'/hello/'时,那我们访问这个视图就需要输入网址为127.0.0.1:5000/hello/才能访问到我们的这个视图了,

    这就是flask中url与函数的映射。

    2. url传入参数

    url中包含参数

    当我们访问CSDN,博客园,简书等网站中的文章详情的时候,我们会发现起始每篇文章的详情页面的url前面不封都是一样的,只有后面一部分不一样。那么这个不一样的部分我们就可以当做一个参数传入视图中,然后我们在视图中拿到相应的参数在进行相应的操作,返回相应的数据。那么在flask中怎样实现这个功能呢?

    @app.route('/article_detail/<article_id>/')
    def article_detail(article_id):
      return "你查看到文章id 为 %s" % article_id
    
    

    在上面的函数视图中,app.route()中用<>这个包裹起来的就是我们定义的参数,这里我们就定义了一个article_id这样的参数。当我们在url中定义了一个参数之后,我们必须也在函数中写入这个参数,而且参数名必须和url中的参数名一致。然后我们就可以在视图中拿到article_id这个参数的值了。

    然后启动项目,在浏览器中输入127.0.0.1:5000/article_detail/3/等相似 的url,就能够查看到相应的效果了。

    上面的例子中虽然我们能够将参数通过url传入函数视图中,但是我们并不能对url做类型限制,比如我们想要的article_id必须是一个int数据,当用户传入的参数不是int型的数据的时候,那么他就访问不到我们这个函数视图.出现404页面.那么flask中怎样实现这样这个需求呢?

    在flask中,我们是可以对url指定类型的。

    @app.route('/article_detail/<int:article_id>/')
    def article_detail(article_id):
      return "你查看到文章id 为 %s" % article_id
    
    

    这样,我们就对传入的参数做了类型限制。只需要参数前面写上我们的类型就可以了.

    在flask中,除了支持int类型外,还支持以下类型:

    string: 默认的数据类型,接受没有任何斜杠/的字符串。 int: 整形 float: 浮点型。 path: 和string类似,但是可以传递斜杠/。 uuid: uuid类型的字符串。(什么是uuid?) any:可以指定多种路径,这个通过一个例子来进行说明:
    @app.route('/<any(blog,article):url_path>/<int:id>/')
    def detail(url_path,id):
      if url_path == 'blog':
        return 'blog detail is ' + str(id)
      else:
        return 'article detail is ' + str(id)
    
    

    这样,我们在浏览器中输入127.0.0.1:5000/blog/3/或127.0.0.1:5000/article/3/都能够访问到这个视图,那么我们怎么知道当前是以哪个url访问的呢,我们可以通过:后面我们定义的url_path参数来接受这个值,然后我们在视图中也要写入这个参数。然后我们就能拿到这个值了.

    url中以查询字符窜的方式传递参数(get请求)

    有些时候,我们并不需要向上面那样传递参数,通过?xxx=xxx这样的形式传递参数。

    那么在flask中,我们怎样得到这种参数的值呢?