【问题标题】:How to use something like a logout required in django views?如何使用 django 视图中所需的注销之类的东西?
【发布时间】:2020-12-13 11:10:53
【问题描述】:

我有一个像这样的登录和注册视图:

def sign_up(request):
    form = UserCreationForm()
    registered = False 
    if request.method == 'POST':
        form = UserCreationForm(data=request.POST)
        if form.is_valid():
            form.save()
            registered = True 
    
    context = {
        'form':form,
        'registered':registered,
    }
    return render(request, 'users/sign_up.html',context)

def login_page(request):
    form = AuthenticationForm()
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(username=username,password=password)
            if user is not None:
                login(request,user)
                return HttpResponseRedirect(reverse('index'))

    context = {
        'form':form,
    }
    return render(request, 'users/login.html',context)

我真正想要的是,如果用户没有先注销并尝试访问注册或登录页面,他们将被重定向到注销页面以首先注销。因此,除非注销,否则他们无法访问这两个页面。我该怎么做?

【问题讨论】:

    标签: python django


    【解决方案1】:

    可以查看用户是否登录;

    from django.contrib.auth import authenticate
    
    if user.is_authenticated:
        return redirect(reverse('logout_page_of_your_choice_where_you_want_to_redirect_the_user_if_he_is_logged_in'))
    

    在上述视图中使用此代码块(signup_page 和 login_page 函数)。

    【讨论】:

    • 是的,它奏效了。堆栈溢出显示我可以在 10 分钟内将其标记为已接受。所以我在等待
    • 谢谢!对于您的友好信息,因为您似乎是 django 的初学者,我会推荐 ALLAUTH 而不是 AUTH 用于 django 中的身份验证,因为它提供了更多功能。您可以在那里使用社交帐户登录、电子邮件验证等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2018-03-24
    • 1970-01-01
    • 2015-05-17
    • 2012-12-26
    相关资源
    最近更新 更多