Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果满足条件,则重定向django中的所有视图_Python_Django_Django Views - Fatal编程技术网

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,我希望它应用于所有视图。