如何在Django的FormWizard视图中插入login if语句?

如何在Django的FormWizard视图中插入login if语句?,django,login,formwizard,Django,Login,Formwizard,如何将“if request.user.is_authenticated”插入下面的表单向导类中,如下面的示例所示?这个想法是,这个视图是我的主页,如果用户已经登录,我想重定向到另一个页面 目前,它将“名称‘请求’未定义”作为错误消息提供给我。我尝试了BusinessWizard类(request,SessionWizardView),但不幸的是它不起作用。也许这只是我的疏忽。谢谢你的帮助 视图.py class BusinessWizard(SessionWizardView):

如何将“if request.user.is_authenticated”插入下面的表单向导类中,如下面的示例所示?这个想法是,这个视图是我的主页,如果用户已经登录,我想重定向到另一个页面

目前,它将“名称‘请求’未定义”作为错误消息提供给我。我尝试了BusinessWizard类(request,SessionWizardView),但不幸的是它不起作用。也许这只是我的疏忽。谢谢你的帮助

视图.py

class BusinessWizard(SessionWizardView):
      if request.user.is_authenticated:
          HttpResponseRedirect('some url')
      else:
          #some code and functions etc

最简单的方法是在urlconf中添加登录\必需的用户\通过\测试装饰程序:

from django.conf.urls import patterns
from django.contrib.auth.decorators import user_passes_test
from .views import BusinessWizard

urlpatterns = patterns('',
    (r'^wizard/$', user_passes_test(lambda user: user.is_anonymous(), 'some url', None)(BusinessWizard.as_view())),
)
参考资料:

如果要定义自己的装饰器,可以使用以下代码段:

from functools import wraps
from django.conf.urls import patterns
from django.http import HttpResponseRedirect
from .views import BusinessWizard

def anonymous_required(redirect_url=None):
    """
    Decorator that redirects authenticated users to a different URL.
    """

    def decorator(view_func):
        @wraps(view_func, assigned=available_attrs(view_func))
        def _wrapped_view(request, *args, **kwargs):
            if request.user.is_anonymous():
                return view_func(request, *args, **kwargs)
            return HttpResponseRedirect(redirect_url)
        return _wrapped_view
    return decorator

urlpatterns = patterns('',
    (r'^wizard/$', anonymous_required('some url')(BusinessWizard.as_view())),
)

谢谢你的回复,但是这却达到了我所期待的相反效果。我希望视图仅在用户未登录时显示。有没有类似的东西可以帮我做到这一点?谢谢抱歉,我错过了您要重定向已验证用户的部分。通过使用user\u passes\u test decorator并检查user.is\u anonymous()是否只有经过身份验证的用户才会被重定向。感谢您的帮助!这只是一个简短的附带问题,我在谷歌搜索时遇到了麻烦,但您是否知道为什么“/?next=/”会出现在url的末尾,以及我将如何摆脱它?谢谢你!我修改了我的答案。用户_passes_test decorator使用第三个参数指定重定向_字段的名称。传递None时,此GET参数不会附加到URL。请注意,Django文档中没有正式记录第三个参数。我只是在我的答案中添加了一个自定义装饰器代码,它显示了如何在不使用user_passes_测试的情况下实现这一点。这甚至更干净,不依赖于未记录的redirect\u field\u name参数。