Пользовательская форма входа в Django возвращает None - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь аутентифицировать пользователя с помощью пользовательской формы входа, но authenticate () возвращает None.

Я создал пользовательский шаблон формы входа, представление индекса, в котором отображается форма входа для неаутентифицированных пользователей иЕще один шаблон для аутентифицированных, я «сопоставил» соответствующие URL-адреса с требуемыми функциями представлений и добавил несколько отладочных сообщений с печатью, чтобы узнать, в какой части кода поток останавливается.

В views.py

def index(request):
    if request.user.is_active and request.user.is_authenticated:
        print(request.user)
        if request.user.groups.filter(name='groupname').exists():
            print('does have groups')
        else:
            print('doesnot have groups')
        return render(request, 'generic_pages\\index_and_login\\menu1.html', {})
    else:
        return render(request, 'generic_pages\\index_and_login\\generic_login.html', {})

def login_user(request):
    print('We are in login_user')
    logout(request)
    username = password = ''
    if request.POST:
        print('We know we have a POST request')
        username = request.POST['login'][0]
        password = request.POST['login'][1]
        user = authenticate(username=username, password=password)
        print(user) #Prints the user object
        if user is not None and user.is_active:
            print('We know user is active')
            login(request, user)
    return HttpResponseRedirect('/')

В urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    #path('accounts/', include('django.contrib.auth.urls')),
    re_path(r'^$', views.index, name='index'),
    path('', views.index, name='index'),
    re_path(r'^login', views.login_user, name='login_user'),
    re_path(r'^logout', views.logout_user, name='logout_user'),
    re_path(r'^.*/$', views.handler404, name='handler404'),
]

В generic_login.html

{% load static %}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="{% static 'generic_pages/index_and_login/css/generic_login.css' %}" >

<div class="wrapper fadeInDown">
  <div id="formContent">
    <div class="fadeIn first">
      <img src="{% static 'generic_pages/index_and_login/images/slot1.png' %}" id="icon" alt="User Icon" />
    </div>

    <form method="POST" action="/login/">
        {% csrf_token %}
        {{form.as_p}}
        <input type="text" id="login" class="fadeIn second" name="login" placeholder="login">
        <input type="password" id="password" class="fadeIn third" name="login" placeholder="password">
        <input type="submit" class="fadeIn fourth" value="Log In">
    </form>
  </div>
</div>

И это вывод на экран отладки, где я вижу, что authenticate () возвращает None...

System check identified no issues (0 silenced).
May 18, 2019 - 15:27:38
Django version 2.2.1, using settings 'vpSlots_django.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
We are in login_user
We know we have a POST request
None
[18/May/2019 15:28:24] "POST /login/ HTTP/1.1" 302 0
[18/May/2019 15:28:24] "GET / HTTP/1.1" 200 1074

РЕДАКТИРОВАТЬ Я изменил html имена имени пользователя и пароля, как и советовал, я также изменил свои представления, как показано ниже.Я тоже обновляю отладку.Тем не менее, я получаю None.

Обновлен views.py

def login_user(request):
    print('We are in login_user')
    logout(request)
    username = password = ''
    if request.POST:
        print('We know we have a POST request')
        print(request.POST)
        username = request.POST['login']
        password = request.POST['password']
        print("User/Pass: ", username, "/", password)
        user = authenticate(request.POST)
        print(user) #Prints the user object
        if user is not None and user.is_active:
            print('We know user is active')
            login(request, user)
    return HttpResponseRedirect('/')

Обновлен шаблон страницы входа

{% load static %}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="{% static 'generic_pages/index_and_login/css/generic_login.css' %}" >

<div class="wrapper fadeInDown">
  <div id="formContent">
    <div class="fadeIn first">
      <img src="{% static 'generic_pages/index_and_login/images/slot1.png' %}" id="icon" alt="User Icon" />
    </div>

    <form method="POST" action="/login/">
        {% csrf_token %}
        {{form.as_p}}
        <input type="text" id="login" class="fadeIn second" name="login" placeholder="login">
        <input type="password" id="password" class="fadeIn third" name="password" placeholder="password">
        <input type="submit" class="fadeIn fourth" value="Log In">
    </form>
  </div>
</div>

Обновлен журнал отладки

System check identified no issues (0 silenced).
May 18, 2019 - 16:01:18
Django version 2.2.1, using settings 'vpSlots_django.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
We are in login_user
We know we have a POST request
<QueryDict: {'csrfmiddlewaretoken': ['FvxrtNJllBAqfh7Ir8qK9nCu4gWyeNCb33XRPcJs5PQNb6h6tASiHDDRedWaRUpp'], 'login': ['Player01'], 'password': ['rascal123']}>
User/Pass:  Player01 / rascal123
None
[18/May/2019 16:01:26] "POST /login/ HTTP/1.1" 302 0
[18/May/2019 16:01:26] "GET / HTTP/1.1" 200 1077
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...