在服务器状态码中,302以及303代表URL地址被重定向了
在flask web框架中,重定向需要使用函数redirect(),如下
@app.route('/redirect') # 当访问这个url地址的时候,访问请求被重定向
def redir():
return redirect('http://www.baidu.com', code=303)
# redirect()接收三个参数,第一个字符串类型的url地址,第二个是状态码(默认是302),第三个是response对象(默认是None)
在实际过程中,重定向用的比较多的地方是访问本站内的地址不存在了,将其重新定向到本站的另一个url地址中去。有两种方法可以办到这一点,第一个是直接在redirect()函数中,将固定的本站url地址传入进入,如下
@app.route('/notFoundPage')
def not_found():
return '不好意思,服务器维护中,暂停服务'
@app.route('/redirect')
# 当访问这个url地址的时候,访问请求被重定向到本站的'/notFoundPage'这个url对应的视图函数,由其进行访问处理
def redir():
return redirect('/notFoundPage')
还有一种办法就是使用url_for()函数
url_for()函数接收传参,第一个参数是视图函数的名称,url_for 能根据这个视图函数的名称反解析到相对应的url地址,再根据这个地址去访问url对应的视图函数。第二个参数是不定长参数,以name='Jack'的形式传入,生成的url地址中会带请求参数。如下
@app.route('/notFoundPage')
def not_found():
info = request.args.get('address')
return "Sorry,we don't find the information of %s" % info
@app.route('/urlFor/<string:address>')
def my_url_for(address):
print(url_for('not_found', info=address))
# 如果访问的url地址是/urlFor/China,那么输出address的结果是 /notFoundPage?info=China
return redirect(url_for('not_found', info=address)) # info=address也可以不写,不写的话就是输出正常的url地址
也可以写成这种方式,对于参数的获取是一样的
@app.route('/notFoundPage/<string:info>')
def not_found(info):
# info = request.args.get('address')
return "Sorry,we don't find the information of %s" % info # 直接通过传递参数的形式,而不通过request.args来获取
@app.route('/urlFor/<string:address>')
def my_url_for(address): # 如果这个时候也和上文中一样打印,则结果是 /notFoundPage/China 原因就在于url_for 是根据视图名称反映射出url地址
return redirect(url_for('not_found', info=address))