Как использовать что-то вроде выхода из системы, требуемого в представлениях django?

#python #django

#python #django

Вопрос:

У меня есть представление login и sign_up, подобное этому:

 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)
 

На самом деле я хочу, чтобы, если пользователь не вышел из системы первым и пытается получить доступ к странице регистрации или входа, он перенаправляется на страницу выхода для первого выхода из системы. Таким образом, они не могут получить доступ к этим 2 страницам, если они не вышли из системы. Как я могу это сделать?

Ответ №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 ).

Комментарии:

1. Да, это сработало. Переполнение стека показывало мне, что я могу пометить это как принятое через 10 минут. Итак, я ждал

2. Спасибо! Для вашей любезной информации, поскольку, похоже, вы новичок в django, я буду рекомендовать ALLAUTH вместо AUTH для аутентификации в django, поскольку это дает намного больше возможностей. Вы можете использовать социальную учетную запись для входа в систему, аутентификации по электронной почте и т. Д.