Я пытаюсь создать страницу входа для пользователей, которых я создал с помощью администратора 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>





Похоже, с вашим кодом есть проблемы
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>
@ user8543557 Взгляните на это руководство. Я все еще новичок в Django, но вместе с документами Django он помог мне понять, как работает система аутентификации пользователей. wsvincent.com/…
Я получаю сообщение об ошибке «не могу найти ссылку на 'login' в views.py» в указанном выше пути. я изменил представление, как указано выше, переименовал страницу html и изменил путь, как указано выше