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