一、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)