Python 如果满足条件,则重定向django中的所有视图
我的用户配置文件模型上有一个字段,用于查看用户是否:Python 如果满足条件,则重定向django中的所有视图,python,django,django-views,Python,Django,Django Views,我的用户配置文件模型上有一个字段,用于查看用户是否: class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True) ... password_change_required = models.BooleanField(default=True) 这是我重定向所有视图的一种方式,如下所示: if request.user.profi
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True)
...
password_change_required = models.BooleanField(default=True)
这是我重定向所有视图的一种方式,如下所示:
if request.user.profile.password_change_required:
redirect(....)
我可以把这个逻辑放在哪里,这样它就可以访问所有视图
class ProfileUpdateView(UpdateView):
def get(self, request, *args, **kwargs):
if not request.user.profile.password_change_required:
return super(ProfileUpdateView, self).get(request, *args, **kwargs)
else:
return redirect('/accounts/change-password/?next=%s' % request.path)
确保还导入了重定向
from django.shortcuts import redirect
使用:
在请求阶段,在调用视图之前,Django将应用
中间件按照中间件中定义的顺序,自上而下
您可以将其视为洋葱:每个中间件类都是一个“层”
这将覆盖位于洋葱核心的视图。如果请求
穿过洋葱的所有层(每一层都叫
获取_响应以将请求传递到下一层),一直到
在核心视图中,响应将通过每一层
(按相反顺序)在返回的路上
如果其中一层决定短路并返回响应
如果不调用它的get_响应,洋葱的每一层
在该层内(包括视图)将看到请求或
响应。响应将仅通过与响应相同的层返回
请求已通过
只要您的订购是正确的(例如,在验证中间件so
request.user
可用之后),哪个应该做您想要做的事情。这不会只影响ProfileUpdateView吗?是的。它只会影响ProfileUpdateView。如果要将其应用于所有通用视图类,可能必须使用问题中所述的mixins,我希望它应用于所有视图。