2023.12.6 关于flask中的route、render_template、redirect的关系问题

2023.12.6 关于flask中的route、render_template、redirect的关系问题

之前对于route、render_template、redirect三者的关系还有一些模糊,测试了一个案例后就比较清晰了,简单来说就是路径、模板和重定向,三者相对独立,只是一般命名的时候都用同样的名称,容易造成误解。

注意:不同路径下可以渲染同一个模板!

在 Flask 中,route、render_templateredirect 是用于构建 Web 应用程序的不同功能。
route 是一个装饰器,用于在 Flask 应用中定义路由。通过 route 装饰器,可以将 URL 和对应的处理函数绑定起来。例如,@app.route('/') 可以将根路径绑定到一个处理函数上。

render_template 是一个函数,用于在 Flask 应用中渲染模板文件。它接受一个模板文件的名称作为参数,并且可以传递一些数据给模板文件,以便在生成 HTML 响应时进行渲染。通常,在处理函数中使用 render_template 来生成动态的网页内容。

注意:可以在同一个路径下渲染不同的模板!

redirect 是一个函数,用于在 Flask 应用中执行重定向操作。它接受一个 URL 作为参数,并将用户请求重定向到该 URL 对应的页面。通常,您可以在处理函数中使用 redirect 来将用户重定向到其他页面,例如登录成功后跳转到主页。

注意:重定向定向到路径而不是模板!

简而言之,route 用于定义路由,将 URL 和处理函数绑定;render_template 用于渲染模板文件,生成动态的网页内容;而 redirect 用于执行重定向操作,将用户导航到其他页面。

下面有两种写法,程序齐全的时候运行,功能是一样的,但是细节会有区别。测试后可以有比较深的体会。

方法一

@bindex.route('/home')
def home():
    if 'username' in session:
        username = session['username']
        role = session['role']
        if role == 'admin':
            return render_template('home_admin.html', username=username)
        else:
            return render_template('home_user.html', username=username)
    else:
        return redirect(url_for('account.login'))

方法二:

@account.route('/home')
def home():
    if 'username' in session:
        username = session['username']
        role = session['role']
        if role == 'admin':
            return redirect(url_for('bindex.home_admin'))
        else:
            return redirect(url_for('bindex.home_user'))
    else:
        return redirect(url_for('account.login'))

方法一和方法二的区别在于:
(1)方法一的url仅会显示/home,而非/home_admin或者/home_user,相当于用/home遮盖住了/home_admin或者/home_user,方法二相反。
(2)两者均可以在/home_admin或者/home_user模板上再次进行get/post操作,实现效果相同。

综上,方法一可以隐藏后端可能存在的URL,在安全性上会略好于方法二;方法二更适合做比较复杂的多种权限管理系统,可以通过蓝图的形式将多种权限进行独立划分。方法一的优点是代码重复量少,但是耦合严重。可以视实际需求进行选择。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leigh_chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值