Flask教学课 – 7、【Flask_URL】URL中的两种方式传参

发布于 2021-05-09  29 次阅读


补充:以后项目在学习中请默认打开BeBug模式,后文不在赘述

1、路径与函数映射

在我们创建好Flask项目后,自动生成的app,py文件里面会有一个这样的代码,其中 app.route('/') 就是路径,下面的 def hello_word() 便是路径所映射的函数,意思就是,当你在浏览器访问这个路径的时候,便会开始执行下面映射的函数

@app.route('/') 
def hello_world():
    return 'Hello World!'

此时我们运行起项目后,访问命令行给出的地址,即可看见 Hello World!

我们在代码下面可以自己也写一个映射,然后打开浏览器访问:http://127.0.0.1:5000/6b7 ,即可看见内容

@app.route('/6b7')
def b7():
    return 'Hello 6b7~'

2、路径参数

我们用图书架举例,比如说我们图书架上有五本书,我们给五本书定义了1~5的数字排码,我们需要看哪本书就去取哪本书。在Flask中同理,我们可以使用定义路径的方式去遍历所有图书,但是一本书一个路径始终是麻烦不方便,而且敲的代码量还要多。这个时候,我们可以使用参数的方法去实现以上的效果,代码如下

# 路径里面的参数名称(<>符号里面的内容)和函数里面的参数名称保持一致
@app.route('/b/<num_id>/')
def num(num_id):
    return '请求的书是第' + num_id + '本'

传递参数的语法:‘/<参数名>/’  ,然后在视图函数中,也要定义同名函数

此时,我们访问地址:http://127.0.0.1:5000/b/1/       我们给地址里面传入的参数是:1,那么我们网页上显示的内容就是:请求的书是第1本

同理:我们把传参修改为:4 ,    那么我们获得的返回内容就是:请求的书是第4本

3、限制传参类型

案例接着上面的,我们已经成功的通过方法实现了传参。但是呢,有时候有人故意或者不小心输错地址,给内容添加了其他不应该出现的字符(比如:字母,标点符号等)。那么结果就不是我们预想设计的方向了,因此我们在必要的时候可以给传输限制传入的数据类型,代码如下

# 参数名前面写上数据类型 + 英文冒号
@app.route('/b/<int:num_id>/')
def num(num_id):
    return '请求的书是第' + num_id + '本'

此时我们就已经限制了参数只能接受int类型的数据,我们输入其他非int类型的数据就会提示无法找到

# 数据类型
string:默认数据类型,接受没有‘/ , \’的文本
int:接受整数
float:浮点类型
path:与string一样,但是接受‘/ , \’的文本
uuid:只接受uuid字符串
any: 可以指定多种路径

示例地址:http://127.0.0.1:5000/b/abc/

4、Path方式演示

我们先使用string和path分别写代码

@app.route('/p/<string:id>')
def id(id):
    return '请求的书是第' + id + '本'

 

如果我们继续想后面添加内容呢,比如http://127.0.0.1:5000/p/abc/def,那么就会报错

我们再来使用path来看

@app.route('/p/<path:id>')
def id(id):
    return '请求的书是第' + id + '本'

5、UUID演示

UUID可以理解为一个普通的字符串,但是它和普通字符串又有一些区别,UUID有一个固定的长度,且是唯一。它常应用于数据库,例如主键。代码如下

@app.route('/u/<uuid:user_id>/')
def user_id(user_id):
    return "用户的UUID:%s" % user_id

# 生成UUID
import uuid
print(uuid.uuid4())

 

UUID数据类型只能接受uuid的字符串,且是唯一的字符串

访问地址:http://127.0.0.1:5000/u/1a4a91de-ea52-4991-a6f5-ee73de360852/

6、any演示

它的作用是在不同的路径映射同一个视图函数(在一个url中指定多个路径),代码如下

@app.route('/<any(blog,user):url_path>/<id>/')
def url_path(url_path, id):
    if url_path == 'blog':
        return "博客详情: %s" % id
    else:
        return "用户详情:%s" % id

 

访问地址一:http://127.0.0.1:5000/blog/123/

访问地址二:http://127.0.0.1:5000/user/456/

7、查询字符串方式传值

用百度搜索做个例子,地址:https://www.baidu.com/s?wd=Python

我们可以发现,当我们搜索Python的时候,百度的地址后面会有一个(s?wd=)出现,它就是字符串查询方式传值,Python代码如下

# 首先在上面导入request模块 
from flask import Flask, request 

# 查询传值代码 
@app.route('/d/') 
def d(): 
    wd = request.args.get('wd') 
    return '查询的字符串是:%s' % wd

地址:http://127.0.0.1:5000/d/?wd=Python

接受用户传递的参数:

  • 第一种:使用path的形式,将参数嵌入到路径中
  • 第二种:使用查询字符串的方式传参,就是通过   key=value   的形式传递

Day in and day out .