Flask10_url重定向

#encoding=utf-8
"""
重定向redirect
(1)flask中的redirect函数可以重定向到指定的页面(跳转到指定页面)
(2)redirect函数用于重定向,实现机制很简单,就是向客户端(浏览器)发送一个重定向的HTTP报文,浏览器会去访问报文中指定的url
(3)使用redirect时,只需要给定一个字符串类型的参数即可,会自动访问字符串指定的链接
(4)重定向分为永久性重定向和暂时性重定向,在页面上体现的操作就是浏览器会从一个页面跳转到另一个页面
(5)永久性重定向:http状态码是301,多用于旧网址被废弃要转到一个新的网址确保用户的访问
    >> 京东网站:输入原京东页面网址的时候,原京东页面已废除,会重定向到新京东页面的网址
(6)暂时性重定向:http状态码是302,表示页面暂时性跳转
    >> 用户登录:用户访问一个需要权限的页面,用户没有登录时,会重定向到登录页面

"""
from flask import Flask
from flask import abort
from flask import url_for
from flask import redirect
from flask import render_template
from werkzeug.routing import BaseConverter

basic = "F:/MyProject"

# 创建web服务器(http)实例:内置方法__name__是预定义变量,被设置为使用本模块,html存放的路径,静态文件的路径
app = Flask(__name__)

# redirect函数可以重定向到指定的页面(跳转到指定页面)
@app.route('/restful/dump')
def dump():
    # 只需要给定一个字符串类型的参数即可,会自动访问字符串指定的链接
    return redirect(url_for('profile',name='url', page=20))


# restful url的int整数测试
@app.route('/restful/int_demo/<int:num1>-<int:num2>')
def page(num1, num2):
    print(f"num1的类型是:{type(num1)}-{num1}")
    print(f"num2的类型是:{type(num2)}-{num2}")
    data = f'书籍页面转换:从{num1}到{num2}'
    return render_template('base1.html', **locals())


# restful url的float浮点数测试
@app.route('/restful/float_demo/<float:num>')
def weight(num):
    print(f"num的类型是:{type(num)}-{num}")
    data = f'我的体重是:{num}斤'
    return render_template('base1.html', **locals())


# restful url的int整数测试
@app.route('/restful/path_demo/<path:way>')
def address(way):
    print(f"way的类型是:{type(way)}-{way}")
    data = f'我的家庭地址是:{way}'
    return render_template('base1.html', **locals())


# 自定义
class MyIntConverter(BaseConverter):
    def __init__(self, url_map):
        super(MyIntConverter, self).__init__(url_map)

    def to_python(self, value):
        # 自动转换成python类型时,后面添加2
        return f"py{value}"

    def to_url(self, value):
        # 使用url_for自定义规则匹配url时,后面添加2
        return f"2{value}"
# 给应用增加一些URL规则,生成对应的正则表达式进行URL匹配
app.url_map.converters['rule'] = MyIntConverter

# 设置自定义的转换器的BaseConverter类(继承werkzeug.routing)
# 使用app.url_map.converters['自定义规则名称'] = 自定义转换器类,将自定义的类映射到app.url_map.converters
@app.route('/restful/profile/<rule:name>')
def profile(name):
    data = f'函数功能:{name}将自定义的类映射'
    return render_template('base1.html', **locals())


# restful url的转换器,使用自定义的规则进行转换
@app.route('/restful/trans')
def trans():
    # url_for反转出请求路由,内部传递的函数名称参数,不能是其所在的函数名称
    # 拼接url链接,使用rule自定义规则将参数转换,传入在路由中已经定义的参数-直接拼接
    print(url_for('profile', name='url'))
    # 传入在路由中没有定义的参数,以get方式('?参数名=参数值')传递
    print(url_for('profile', name='url', page=20))
    data = 'url_for调用profile函数,使用自定义规则,反转获取请求链接'
    return render_template('base1.html', **locals())





# 启动项目服务器--可以通过参数更改,通常网站的页面需要放到网站服务器上,用户无法双击打开
if __name__ == '__main__':
    def run(self):
        app.run(
            # host:主机地址
            host="localhost",
            # port:访问端口
            port=80,
            # debug:调试模式,测试环境True,生产环境Fasle
            debug=True,
            # use_reloader:自动重启
            use_reloader=True
        )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值