【Flask基础】二,视图路由与路由转换器配置(附前/后端定时重定向演示)

一,前端访问路由配置

# coding:utf-8
from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route("/index")
def index():
    """定义的视图函数"""
    return "hello flask"

# 【1】通过methods限定访问方式
@app.route("/post_only", methods=["GET", "POST"])
def post_only():
    return "post only page"


# 【2】访问路由相同,通过不同的请求方式来决定返回不同的页面视图
@app.route("/hello", methods=["POST"])
def hello():
    return "hello 1"
@app.route("/hello", methods=["GET"])
def hello2():
    return "hello 2"


#【3】给视图函数设置多个路由,访问那个路由都能访问到该视图
@app.route("/hi1")
@app.route("/hi2")
def hi():
    return "hi page"


#【4】使用url_for反解析来获取视图url,使用redirect来重定向视图
@app.route("/login")
def login():
    # url = "/"
    # 使用url_for的函数,通过视图函数的名字找到视图对应的url路径
    url = url_for("index")
    return redirect(url)
@app.route("/register")
def register():
    # url = "/"
    url = url_for("index")
    return redirect(url)


if __name__ == '__main__':
    # 通过url_map可以查看整个flask中的路由信息
    print(app.url_map)
    # 启动flask程序
    app.run(debug=True)
    """
     <Rule '/register' (GET, HEAD, OPTIONS) -> register>,
     <Rule '/index' (GET, HEAD, OPTIONS) -> index>,
     <Rule '/hello' (POST, OPTIONS) -> hello>,
     <Rule '/hello' (GET, HEAD, OPTIONS) -> hello2>,
     <Rule '/login' (GET, HEAD, OPTIONS) -> login>,
     <Rule '/hi2' (GET, HEAD, OPTIONS) -> hi>,
     <Rule '/hi1' (GET, HEAD, OPTIONS) -> hi>,
     <Rule '/static/<filename>' (GET, HEAD, OPTIONS) -> static>])
    """

二,路由转换器(路由提取器)

在这里插入图片描述

# coding:utf-8
from flask import Flask, redirect, url_for
from werkzeug.routing import BaseConverter

app = Flask(__name__)


# 【系统预设转换器】
# @app.route("/goods/<int:goods_id>") #提取数字
@app.route("/goods/<goods_id>")  # 不加转换器类型, 默认是普通字符串规则(除了/的字符)
def goods_detail(goods_id):
    """定义的视图函数"""
    return "goods detail page %s" % goods_id

######################################################################################################

#【自定义转换器】

# 【简单--写定的特异性转换器--只用于获取号码】
class MobileConverter(BaseConverter):
    def __init__(self, url_map):
        super(MobileConverter, self).__init__(url_map)
        self.regex = r'1[34578]\d{9}'

# 【复杂--自定义万能转换器--用时输入匹配规则】
class RegexConverter(BaseConverter):
    """"""
    def __init__(self, url_map, regex):
        # 调用父类的初始化方法
        super(RegexConverter, self).__init__(url_map)
        # 将正则表达式的参数保存到对象的属性中,flask会去使用这个属性来进行路由的正则匹配
        self.regex = regex

    #正常直接访问
    def to_python(self, value):
        """"""
        print("to_python方法被调用")
        # return "abc"
        # value是在路径进行正则表达式匹配的时候提取的参数
        ###此处是匹配到的正则数据首先到达的地方,可以在这里对匹配到的数据进行筛选,修改等操作
        return value

    #通过urlfor来重定向访问
    def to_url(self, value):
        """使用url_for的方法的时候被调用"""
        ###通过urlfor转入到该路由的情况下传入的参数,可以在这进行处理
        print("to_url方法被调用")
        # return "15811111111"
        return value


# 【将自定义的装换器注册到应用中】将自定义的转换器添加到flask的应用中
app.url_map.converters["re"] = RegexConverter
app.url_map.converters["mobile"] = MobileConverter


# @app.route("/send/<mobile:mobile_num>")  #使用mobile  预设转换器
@app.route("/send/<re(r'1[34578]\d{9}'):mobile_num>")  #使用re  万能装换器
def send_sms(mobile_num):
    return "send sms to %s" % mobile_num


@app.route("/index")
def index():
    url = url_for("send_sms", mobile_num="18922222222") #重定向视图
    return redirect(url)



if __name__ == '__main__':
    # 通过url_map可以查看整个flask中的路由信息
    print(app.url_map)
    # 启动flask程序
    app.run(debug=True)

三,前后端定时重定向

1.前端定时重定向

  • 当跳转到自定义的404错误页面后,实现两秒后跳转到首页
{% extends '母版.html' %}   {# 将当前页面继承至base.html母版 #}
{% block content %}

<div class="col-10" style="margin: auto">
    <img src="/img/404.png" class="img-fluid"/>
</div>

<script>
    setTimeout(function () {
        location.href = '/';
    }, 2000);
</script>

{% endblock %}

2.后端定时重定向

  • 当访问到某一路由时,自动重定向到首页,可以用于异常网址访问,实质还是前端重定向
# 直接在响应中进行重定向
@app.route('/error')
def redjs():
    html = '感谢访问,2秒以后将跳转到首页.'
    html += "<script>"
    html += "setTimeout(function() {location.href='/';}, 2000);"
    html += "</script>"
    return html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值