Я использую систему аутентификации Django и хочу создать кнопку выхода из системы, как только пользователь войдет на сайт. Но user.is_authenticated не работает, и кнопка выхода отображается даже на странице входа. Может кто-нибудь помочь мне понять, что мне не хватает? ниже мой код для views.py и шаблона -

Просмотр:

def user_login(request):

    form=LoginForm()

    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')

        user = authenticate(username=username, password=password)

        if user:
            print("came here")
            if user.is_active:
                login(request,user)
                return redirect('valid')
        else:
            return HttpResponse('username or password not correct')

    else:

        return render(request, 'restui/login.html',{'form':form})

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>REST API Framework</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
</head>
<body>
    <nav class="navbar navbar-dark bg-primary">

                <a href="#" class="navbar-brand" style="font-family: 'Lato', sans-serif;">REST API Testing Framework</a>

                {% if request.user.is_authenticated %}

                    <button class="btn btn-light" type="submit">Logout</button>

                {% endif %}
    </nav>
    <br>
    <br>
    <br>
    <nav class="navbar fixed-bottom">
        <div class="container">
             <div class="navbar-header">
                <a href="#" class="navbar-brand"></a>
            </div>

            <ul class="nav navbar-nav">
                <li>
                    <a href="#"><img src="infosys-logo.jpg" style="max-height:100px; max-width:90%; right:1px; "></a>
                </li>
            </ul>
        </div>
    </nav>
    {% block body_block %}
    <div class="container">

        <form method="post">
          <div class="form-group">

              {{ form.username.label }} {{ form.username }}

          </div>
          <div class="form-group">
              {{ form.password.label }} {{ form.password }}

          </div>
            <br>
            {% csrf_token %}
          <button type="submit" class="btn btn-primary">Submit</button>
            <small id="emailHelp" class="form-text text-muted">Login issues? Please contact solutions team to get access.</small>

        </form>

         </div>
    {% endblock %}

</body>
</html>
0
Divya Sharma 17 Апр 2019 в 09:12

2 ответа

Лучший ответ

Ну, ваш пользователь все еще аутентифицирован, даже если вы находитесь на странице входа. Вы можете проверить, прошел ли пользователь аутентификацию, и просто перенаправить на другую страницу, чтобы вошедший в систему пользователь не увидел страницу входа.

def user_login(request):

    form=LoginForm()
    if request.user.is_authenticated:
        print("Already logged in")
        return redirect('valid')

    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')

        user = authenticate(username=username, password=password)

        if user:
            print("came here")
            if user.is_active:
                login(request,user)
                return redirect('valid')
        else:
            return HttpResponse('username or password not correct')

    else:

        return render(request, 'restui/login.html',{'form':form})

1
Aman Garg 17 Апр 2019 в 06:50

Попробуйте это {% if user.is_authenticated %}

Это мой код

{% if user.is_authenticated %}
 <li><a href="{% url 'logout' %}"><i class="fa fa-sign-out pull-right"></i> Log Out</a></li>

 {% else %} <a href="{% url 'login' %}" class="fa fa-sign-out pull-right"> LogIn </a>

{% endif %}
0
Sangram 17 Апр 2019 в 06:49