Login() принимает 1 позиционный аргумент, но при использовании django было задано 2
Я не знаю, почему я получаю эту ошибку login() принимает 1 позиционный аргумент, но было дано 2, я просто следую этому руководству, что после регистрации он будет входить автоматически https://www.csestack.org/django-sign-up-registration-form/
def login(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
print("test")
user = form.save()
user.refresh_from_db()
user.first_name = form.cleaned_data.get('first_name')
user.last_name = form.cleaned_data.get('last_name')
user.contact_number = form.cleaned_data.get('contact_number')
user.email = form.cleaned_data.get('email')
user.save()
insert = Customer(
user=user,
first_name=user.first_name,
last_name=user.last_name,
contact_number=user.contact_number,
email=user.email
)
insert.save()
raw_password = form.cleaned_data.get('password1')
users = authenticate(username=user.username, password=raw_password)
login(request, users)
return redirect('Homepage')
else:
form = SignUpForm()
return render(request, 'mysite/login.html', {'form': form})
это отслеживание
Traceback (последний последний вызов): Файл "C:\Users\clair\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\handlers\exception.py", строка 55, в inner response = get_response(request) Файл "C:\Users\clair\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\handlers\base.py", строка 197, в _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\clair\OneDrive\Desktop\Thesis\mysite\myapp\views.py", line 36, in login login(request, users)
Exception Type: TypeError at /login/ Exception Value: login() принимает 1 позиционный аргумент, но было задано 2
Ваша функция представления называется login()
- переименуйте ее, например, в login_view
, чтобы она не затеняла функцию Django login()
, которую вы импортировали и пытаетесь вызвать.
когда вы определяете свою функцию с тем же именем импортированной функции login
вы переопределяете ее ... поэтому вы не можете использовать ее попробуйте добавить _view
для любого представления функции, чтобы больше не сталкиваться с этой проблемой
Небольшая деталь, чтобы вы поняли, что здесь происходит.
Когда вы импортировали метод Django login
, затем вы пошли дальше и определили свой собственный метод, также называемый login
, это и вызвало проблему, потому что функция (определенный вами метод входа ) вызывает себя, а не метод Django login
.
from django.contrib.auth import login # Importing django's login method
# This is your defined method which takes one argument
def login(request):
...
# Because having the same name as the Django method imported, it's calling itself instead.
# Therefore you're getting an error here since it's calling itself and you're passing two arguments.
login(request, users)
...
Поэтому, как уже было сказано другими, просто переименуйте определенный вами метод login
, чтобы программа могла вызывать метод Django login
вместо него.
Измените имя представления или импортируйте функцию под другим именем, например,
from django.contrib.auth import login as auth_login