Python测试开发flask - 2. URL与函数的映射

URL与函数的映射:

从之前的app.py文件中,我们已经看到,一个URL要与执行函数进行映射,使用的是@app.route装饰器。

@app.route装饰器中,可以指定URL的规则来进行更加详细的映射,比如现在要映射一个文章详情的URL,文章详情的URL/article/id/,id有可能为1、2、3…,那么可以通过以下方式:

@app.route('/article/<id>/')
def article(id):
   return '此时是第 %s 页 article detail' % id

其中<id>,尖括号是固定写法,语法为<variable>variable默认的数据类型是字符串。如果需要指定类型,则要写成<converter:variable>,其中converter就是类型名称,可以有以下几种:

  • string: 默认的数据类型,接受没有任何斜杠/的字符串。

  • @app.route('/article/<number>')
    def article_list(number):
       return '%s article detail'%number
  • int:  数据类型只能传递'int'类型

  • @app.route('/page/<int:artiole_id>/')
    def article_detail(artiole_id):
       return '您请求的文章是:%s'%artiole_id
  • float: 数据类型只能传递'float'类型

  • @app.route('/page/<float:artiole_id>/')
    def article_detail(artiole_id):
       return '您请求的文章是:%s'%artiole_id
  • path: 和string类似,都是可以接收任意的字符串,但是'path'可以接收路径,也就是说可以包含传递斜杠/

  • @app.route('/page/<path:test>/')
    def article_detail(test):
       return '您请求的文章是:%s'%test
  • uuid: uuid类型的字符串,只能接收符合uuid 的字符串,uuid是一个全宇宙都唯一的字符串,一般可以用来作为表的主键。

  • @app.route('/user/<uuid:user_id>/')
    def user_detail(user_id):
       return '用户个人中心页面:%s'%user_id
  • any:可以指定多种路径,这个通过一个例子来进行说明:

  • @app.route('/<any(user_1,user_2):url_path>/<id>')
    def detail(url_path,id):
        if url_path == 'user_1':
            return 'user_1个人中心, %s' %id
        else:
            return 'user_2个人中心, %s' %id

    detail这个函数可以接受两个URL,一个是/user_1/,另一个是/user_2/。并且,一定要传url_path参数,当然这个url_path的名称可以随便。

如果不想定制子路径来传递参数,也可以通过传统的?=的形式来传递参数,例如:/article?id=xxx,这种情况下,可以通过request.args.get('id')来获取id的值。如果是post方法,则可以通过request.form.get('id')来进行获取。代码如下

# 导入request模块
from flask import request
@app.route('/search/')
def seacher():
    # wd = request.args.get('wd',type=str,default=None) # get
    wd = request.form.get('wd',type=str,default=None) # post
    return '您通过查询字符串的方式传递的参数是:%s'%wd

 

posted @ 2022-05-15 18:38  Test挖掘者  阅读(101)  评论(0编辑  收藏  举报