«user = authenticate (request, username = username, password = password)» пользователь отсутствует - PullRequest
0 голосов
/ 04 июня 2018
def login_page(request):
    form = LoginForm(request.POST or None)
    context = {
        "form": form
    }
    print("User logged in")
    #print(request.user.is_authenticated())
    if form.is_valid():
        print(form.cleaned_data)
        username  = form.cleaned_data.get("username")
        password  = form.cleaned_data.get("password")
        user = authenticate(request, username=username, password=password)
        print(user)
        print(request.user.is_authenticated())
        if user is not None:
            print(request.user.is_authenticated())
            login(request, user)
            # Redirect to a success page.
            context['form'] = LoginForm()
            return redirect("/")
        else:
            # Return an 'invalid login' error message.
            print("Error")

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

Здравствуйте, я начал играть в Django, но в учебнике, когда преподаватель нажимает на кнопку «Отправить», он аутентифицирует пользователя ... Я уже обнаружил почти такую ​​же проблему с переполнением стека, но проблема в том, чтоу парня вместо переменных была строка (username = 'username'), но проблема в том, что когда я нажимаю на кнопку submit, я получаю сообщение об ошибке:

User logged in
{'username': 'test123', 'password': 'test'}
None
False
Error

User logged in is just a string in print() 
None <- print(user)
False <- print(request.user.is_authenticated())
Error <- else: print("Error")

Я часами борюсь с этой проблемой (у нас естьта же версия Джанго) Джанго == 1.11.4

1 Ответ

0 голосов
/ 04 июня 2018

Так что я не совсем уверен, что именно вызывает ваши проблемы здесь.

Я знаю, что это, вероятно, не то, что они делают в учебнике, но я предлагаю вам использовать встроенный Djangoаутентификация просмотров.Таким образом, вам не нужно повторять код, который уже сделан для вас.

Представления очень просты в использовании.Все, что вам нужно сделать, это установить правильный маршрут в вашем URL, а затем создать шаблон в каталоге 'registration / login.html'.

Сначала установите правильные настройки в вашем файле settings.py (я включаюшаги входа в систему и выхода из системы, потому что они идут рука об руку):

LOGIN_REDIRECT_URL = '/page/you/redirect/to/'
LOGOUT_REDIRECT_URL = '/your/login/page/'

Затем установите URL:

urls.py

from django.conf.urls import url
from django.contrib.auth import views as auth_views
from django.conf import settings

urlpatterns = [
    url(r'^login/$', auth_views.login, {'redirect_authenticated_user': True},name='login'),
    url(r'^logout/$', auth_views.logout, {'next_page': settings.LOGOUT_REDIRECT_URL}, name='logout'), 
]

Затем, наконец, в вашемПапка templates, которая находится в том же приложении, что и файл urls.py, куда вы помещаете маршруты входа и выхода, создайте папку с именем «registration» и создайте HTML-файл с именем «login.html».

Наконец,Ваш файл «login.html» может быть просто таким:

{% block title %}Login{% endblock %}

{% block content %}
    <body>
        <h2>Login</h2>
        <form method="post">
            {% csrf_token %}
            {{ form.as_p }}
            <button type="submit">Login</button>
        </form>
    </body>


{% endblock %}

Если вы хотите выйти из системы, просто поместите кнопку, где вы хотите, и свяжите ее с «/ logout».И после этого аутентификация завершена!

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