跟我学Flask(四)-url传参与重定向

一、URL传参

有时我们需要将同一类 URL 映射到同一个视图函数处理,比如:使用同一个视图函数来显示不同用户的个人信息。

传入参数:通过url地址给视图函数传入参数;

语法:<>,括号里面存储的是参数,可以返回字符串/数值

1.1、默认的数据类型为string,string兼容数值

# 路由传递参数
@app.route('/user/<user_id>')
def user_info(user_id):
    return 'hello %s' % user_id

1.2、可以限制数据类型/int/float,<>是通过转换器实现,Flask有6种默认转换器

# 路由传递参数
@app.route('/user/<int:user_id>')
def user_info(user_id):
    return 'hello %d' % user_id
    
Flask的默认转换器:DEFAULT_CONVERTERS = {

‘default’: UnicodeConverter,

‘string’: UnicodeConverter,

‘any’: AnyConverter,

‘path’: PathConverter,

‘int’: IntegerConverter,

‘float’: FloatConverter,

‘uuid’: UUIDConverter,}

1.3、自定义转换器

转换器作用:限制url地址栏中的数据类型。

需求:想要限制url地址栏中的数据长度

自定义转换器实现:正则表达式是通过函数传参的形式实现,代码扩展性很强。

from flask import Flask
from werkzeug.routing import BaseConverter

app=Flask(__name__)

# 自定义转换器类
class RegexConverter(BaseConverter):

    def __init__(self,map,*args):
        super(RegexConverter, self).__init__(map)
        print(map)
        self.regex = args[0]
        print(args[0])

# 添加自定义的转换器给默认转换器的字典容器
app.url_map.converters['re'] = RegexConverter

@app.route('/regex/<re("[a-z]{6}"):text>')
def hello(text):
    return 'hello %s' % text


if __name__ == '__main__':
    # print(app.url_map)
    # app.run(debug=True)
    app.run(debug=True)

二、重定向

# 导入flask内置的函数redirect
from flask import Flask,redirect,url_for

app = Flask(__name__)


# 重定向redirect:接收参数为location,具体的url地址
# 重新发送网络请求,跳转页面
# 当项目路径(url)或文件发生变化的情况下,可以使用重定向。
@app.route('/')
def index():
    url = 'http://www.12.cn'
    # 重定向到传智播客
    return redirect(url)

# url_for反向解析:接收的参数endpoint,视图函数名
@app.route('/for')
def demo_url_for():
    return redirect(url_for('index'))


if __name__ == '__main__':
    print(app.url_map)
    app.run(debug=True)

猜你喜欢

转载自blog.csdn.net/qq_36217796/article/details/83756474