Django кнопка входа превратилась для выхода из системы после входа пользователя - PullRequest
0 голосов
/ 30 марта 2020

Я хочу создать кнопку, которая может переключаться между входом / выходом

Часть кнопки в доме. html:

 <li class="nav-item text-white">
     {% if request.user.is_authenticated %}
        <a class="nav-link text-black font-weight-bold" href="{% url 'home' %}">Logout</a>
     {% else %}
        <a class="nav-link text-black font-weight-bold" href="{% url 'home' %}">Login</a>
     {% endif %}
 </li>

Но я понятия не имею, как установить с my views.py, поскольку он показывает только выход из системы дома. html

def login_views(request):
  next = request.GET.get('next')
  form = UserLoginForm(request.POST or None)
  if form.is_valid():
    username = form.cleaned_data.get('username')
    password = form.cleaned_data.get('password')
    user = authenticate(username=username, password=password)
    login(request, user)
    if next:
        return redirect(next)
    return redirect('/')
    context = {
    'form': form,
      }

return render(request, "login.html", context)


def home(request):
   return render(request, 'home.html')

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Вы используете {% url 'home'%} в ссылке Выход из системы, которая перенаправляет вас на домашнюю страницу, но, поскольку пользователь не вышел из системы, вы не видите навигационную кнопку или кнопку входа.

В вашем views.py

def logout(request):
    auth.logout(request)
    return redirect('home_url')

И в шаблоне

<li class="nav-item text-white">
     {% if request.user.is_authenticated %}
        <a class="nav-link text-black font-weight-bold" href="{% url 'logout' %}">Logout</a>
     {% else %}
        <a class="nav-link text-black font-weight-bold" href="{% url 'home' %}">Login</a>
     {% endif %}
 </li>

Надеюсь, это поможет.

1 голос
/ 30 марта 2020

from django.contrib.auth.models import auth
def login(request):
next = request.GET.get('next')
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']

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

        if user is not None:
            auth.login(request, user)
            return redirect('/')
        else:
            messages.error(request, 'Invalid credentials')
            return redirect('login_page_url')
    else:
    context = {
    'form': form,
      }
        return render(request, "login.html", context)

Для более подробной информации: https://docs.djangoproject.com/en/3.0/topics/auth/default/#authenticating -пользователей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...