软件测试|一文教你flask路由配置

举报
Tester_muller 发表于 2023/02/12 18:28:45 2023/02/12
【摘要】 flask路由配置Flask中通过使用route装饰器实现路由访问功能,其路由匹配URL规则基于Werkzeug的路由模块。该模块基于Apache及更早的HTTP服务器主张,希望保证优雅且唯一的URL。其使用格式如下:from flask import Flask# 导入 Flask 类app = Flask(__name__)# 创建类的实例@app.route("/hello")# 使...

flask路由配置

Flask中通过使用route装饰器实现路由访问功能,其路由匹配URL规则基于Werkzeug的路由模块。该模块基于Apache及更早的HTTP服务器主张,希望保证优雅且唯一的URL。其使用格式如下:

在这里插入图片描述

from flask import Flask
# 导入 Flask 类

app = Flask(__name__)
# 创建类的实例


@app.route("/hello")
# 使用 route() 装饰器来告诉 Flask 触发函数 的 URL
def hello_world():
    return "<p>Hello, World!</p>"


if __name__ == '__main__':
    app.run()

如上,可以通过访问:http://127.0.0.1:5000/hello.结果如下图所示:

在这里插入图片描述

URL规则

route装饰器基于Werkzeug规则实现,我们可以通过把URL的一部分标记为 <variable_name> 就可以在 URL 中添加变量,也可以通过使用converter:variable_name添加一个转换器来指定规则,支持的converter转换器类型如下:

  • string:接受任何没有斜杠 “/” 的文本(默认类型)
  • int:接受整数
  • float:接受浮点数
  • path:类似默认string,但也接受斜杠
  • uuid:只接受uuid字符串
  • any:可以指定多种路径,但是需要传入参数

示例代码如下:

from flask import Flask
from markupsafe import escape
app = Flask(__name__)

# URL没有尾部斜杠,访问这个URL就会得到一个 404
@app.route('/hello')  
def hello():
    return 'Hello, World'

# 访问没有斜杠结尾的URL时会自动进行重定向,帮您在尾部加上一个斜杠
@app.route('/projects/')
def projects():
    return '项目页面'

# path变量路由,支持get、post方法
@app.route('/user/<username>', methods=['GET', 'POST'])  
def profile(username):
    return f'{username}的个人页面'

# 指定path参数为int类型,如:/post/123
@app.route('/post/<int:post_id>')  
def show_post(post_id):
    return f'文章编号 {post_id}'

# 展示/path/之后的子路径地址
@app.route('/path/<path:subpath>')
def show_subpath(subpath):

    return f'子路径 {escape(subpath)}'

if __name__ == '__main__':
    app.run()

启动服务后,访问的记录如下图所示:

在这里插入图片描述

URL 构建

url_for()可以用于构建指定函数的URL,其使用格式:url_for(<function-name>,dicts),且url_for会自动换衣特殊字符和unicode编码数据,而无需自己构建。

from flask import url_for,Flask
from markupsafe import escape
app = Flask(__name__)

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

@app.route('/getUserById')
def getUser(id):
    return f'当前用户Id:{id}'

@app.route('/user/<username>')
def user(username):
    return f'访问者:{username}'

@app.route('/path/<path:subpath>')
def show_subpath(subpath):
    return f'子路径 {escape(subpath)}'

with app.test_request_context():
    print(url_for('hello'))
    print(url_for('getUser',id=1000))
    print(url_for('user',username="穆勒"))
    print(url_for('show_subpath', subpath='subpath/b'))

运行结果如下图所示:

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。