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
Вернуться на верх