У меня проблемы с регистрацией пользователей, аутентификацией и представлениями в django
У меня есть приложение django, и я создал функцию для входа пользователя, но она выдает ошибку
Это вид
def loginpage(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
return HttpResponse("Username or Password is incorrect!!!")
return render(request, 'login.html')
def LogoutPage(request):
logout(request)
return redirect('login')
это html-код
{% load static %}
<!DOCTYPE html>
<html lang="us">
<head>
<meta charset="UTF-8">
<title>Login</title>
<link rel="stylesheet" href="{% static 'css/login.css' %}">
</head>
<body>
<div class="login-form">
<form method="post">
{% csrf_token %}
<label for="username">Username:</label>
<input type="text" id="username" name="username" required>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required>
<button type="submit">Login</button>
</form>
<p>Don't have an account? <a href="{% url 'signup' %}">Sign up here</a></p>
</div>
</body>
</html>
это url
path('login/', userview.loginpage, name='loginpage'),
вот какая ошибка отображается TypeError at /login/
login() missing 1 required positional argument: 'user'
Метод запроса: GET URL запроса: http://127.0.0.1:8000/login/. Версия Django: 4.2.11 Тип исключения: TypeError Значение исключения:
login() missing 1 required positional argument: 'user'
Исключение Местонахождение: C:\Users\kakarot\PycharmProjects\TradingApp.venv\Lib\site-packages\django\core\handlers\base.py, строка 197, in _get_response Вызвано во время выполнения: django.contrib.auth.login Исполняемый файл Python: C:\Users\kakarot\PycharmProjects\TradingApp.venv\Scripts\python.exe Версия Python: 3.11.7 Путь к Python:
['C:\Users\kakarot\PycharmProjects\TradingApp', 'C:\Users\kakarot\AppData\Local\Programs\Python\Python311\python311.zip', 'C:\Users\kakarot\AppData\Local\Programs\Python\Python311\DLs', 'C:\Users\kakarot\AppData\Local\Programs\Python\Python311\Lib', 'C:\Users\kakarot\AppData\Local\Programs\Python\Python311', 'C:\Users\kakarot\PycharmProjects\TradingApp\.venv', 'C:\Users\kakarot\PycharmProjects\TradingApp\.venv\Lib\site-packages']
Время сервера: Tue, 16 Apr 2024 15:14:14 +0000
Я добавил пользователя, но он все равно спрашивает аргумент пользователя. Я перезапустил, но все осталось по-прежнему
Почему ваш запрос GET запрос. а весь ваш код, касающийся аутентификации, - request.POST Можете ли вы проверить сетевой трафик в хроме. и вставить запрос в просмотр для отладки.
Сообщение об ошибке, с которым вы столкнулись, - это сообщение TypeError, указывающее на отсутствие позиционного аргумента в вашей функции Python, login().
Вот обновленная версия вашего кода:
def loginpage(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
# this Boolean user call-check is required for the authentication process.
if user.is_active:
login(request, user)
return redirect('home')
else:
return HttpResponse("Username or Password is incorrect!!!")
return render(request, 'login.html')
However, ensure that your urls.py file path points to the exact view because I don't understand where the `userview.loginpage` is from, which not quite conventional in Django, is it not supposed to be something like `views.loginpage`?
Если ошибка сохранится, в чем я сомневаюсь, я хотел бы увидеть класс модели User, а также то, использовали ли вы пользовательскую модель User или нет. И обратите внимание, что подход CBV в данном контексте гораздо продуктивнее, потому что Django имеет более приятный способ обработки этой проблемы в бекенде через from django.contrib.auth import views as auth_views
и использование класса LoginView.