Я не могу войти на страницу

Я пытаюсь создать страницу входа для пользователей, которых я создал с помощью администратора django, которые могут войти в систему. Но по приведенному ниже коду я не могу войти в систему, т.е. после нажатия кнопки входа в систему я не перенаправляюсь на страницу, которую я указал.

forms1.py

    from django import forms

    class UserForm(forms.Form):
        username = forms.CharField(widget=forms.TextInput(attrs = {'placeholder': 
    'Username'}))
        password = forms.CharField(widget=forms.PasswordInput(attrs= 
   {'placeholder': 'Password'}))
        fields = ['username', 'password']

views.py

    def Userform(request):
        if request.method == 'POST':
            form = UserForm(request.POST)
            if form.is_valid():
                userObj = form.cleaned_data
                username = userObj['username']
                password = userObj['password']
                user = authenticate(Username=username, password=password)
                if user is not None:
                    login(request, user)
                    return HttpResponseRedirect('/user/')
        else:
            form = UserForm()
        return render(request, 'index.html', {'form' : form})  

URL-адреса

    urlpatterns = [
    path('admin/', admin.site.urls),
    path('user/',user),
    path('login/',Userform),
    ]

index.html

     <form class = "login-form" method = "post" action = "">
                {% csrf_token %}
                {{ form.as_p }}
                 <button type = "submit">login</button>                 
     </form>
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
33
2

Ответы 2

Похоже, с вашим кодом есть проблемы

forms1.py

First of all fields should be a part of Meta class. Secondly, you actually don't require fields because you are manually taking the fields

views.py

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

Имя пользователя должно быть в нижнем регистре username. Но это, наверное, здесь просто опечатка.

Наконец, вам действительно не нужно создавать свое представление для входа в систему. В authviews доступны встроенные функции.

Просмотры авторизации

Вам не нужно создавать UserForm, поскольку есть встроенные функции, которые будут обрабатывать вход в систему, выход из системы и пароли с помощью django.contrib.auth.

Прочтите хорошо https://docs.djangoproject.com/en/2.1/topics/auth/default/

Может быть, что-то вроде:

views.py

from django.contrib.auth import authenticate, login as auth_login

def login(request):
    if request.method == "POST":
         user = authenticate(username=request.POST['username'], password=request.POST['password'])
         if user is not None:
             auth_login(request, user)
             return redirect('user')
    else:
        return render(request, 'login.html')

urls.py

from django.contrib.auth import views as auth.views

path('login/', auth_views.login, name='login')

с помощью auth.views.login попытается отобразить login.html по умолчанию. Так что переименуйте index.html в login.html

login.html

<form method = "POST">
 {% csrf_token %}
 {{ form.as_p }}
  <button type = "submit">Login</button>
</form>

Я получаю сообщение об ошибке «не могу найти ссылку на 'login' в views.py» в указанном выше пути. я изменил представление, как указано выше, переименовал страницу html и изменил путь, как указано выше

user8543557 08.12.2018 15:30

@ user8543557 Взгляните на это руководство. Я все еще новичок в Django, но вместе с документами Django он помог мне понять, как работает система аутентификации пользователей. wsvincent.com/…

HBhaa 10.12.2018 18:46

Другие вопросы по теме