2023.12.6 关于flask中的route、render_template、redirect的关系问题
2023.12.6 关于flask中的route、render_template、redirect的关系问题
之前对于route、render_template、redirect
三者的关系还有一些模糊,测试了一个案例后就比较清晰了,简单来说就是路径、模板和重定向,三者相对独立,只是一般命名的时候都用同样的名称,容易造成误解。
注意:不同路径下可以渲染同一个模板!
在 Flask 中,route、render_template
和 redirect
是用于构建 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,在安全性上会略好于方法二;方法二更适合做比较复杂的多种权限管理系统,可以通过蓝图的形式将多种权限进行独立划分。方法一的优点是代码重复量少,但是耦合严重。可以视实际需求进行选择。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!