Как исправить create() принимает 1 позиционный аргумент, но было задано 5 В python django
Я создаю форму входа и регистрации в Django. Я получил ошибку create() takes 1 positional argument but 5 were given
.
код:
def register(request):
if request.method=="POST":
username=request.POST['username']
name=request.POST['name']
email=request.POST['email']
password=request.POST['password']
user_create = User.objects.create(username,name,email,password)
user_create.save()
messages.success(request, " Your account has been successfully created")
return redirect("/")
else:
return HttpResponse("404 - Not found")
html
https://paste.pythondiscord.com/amoturoqop.xml
Вам следует работать с .create_user(…)
[Django-doc] и работать с именованными параметрами, а не позиционными:
user_create = User.objects.create_user(
username=username,
first_name=name,
email=email,
password=password
)
Функция .create_user(…)
хэширует пароль таким образом, чтобы пользователь мог быть аутентифицирован должным образом.
Хотя первые три параметра - username
, email
и password
и вы, таким образом, можете передать их как позиционный параметр, я бы не советовал этого делать, поскольку явный лучше неявного (часть The Zen of Python).
Поскольку .create_user(…)
сохранит объект в базе данных, вам не нужно .save()
выполнять user_create
:
def register(request):
if request.method == 'POST':
username=request.POST['username']
name=request.POST['name']
email=request.POST['email']
password=request.POST['password']
User.objects.create_user(
username=username,
first_name=name,
email=email,
password=password
)
messages.success(request, 'Your account has been successfully created')
return redirect('/')
else:
return HttpResponse('404 - Not found', status=404)
Попробуйте это:
def register(request):
if request.method=="POST":
username=request.POST['username']
name=request.POST['name']
email=request.POST['email']
password=request.POST['password']
instance, created = User.objects.update_or_create(
username=username,
defaults={'username': username, 'name': name, 'email': email, 'password': password},
)
if created:
messages.success(request, " Your account has been successfully created")
else:
messages.success(request, " Your account has been successfully updated")
return redirect("/")
else:
return HttpResponse("404 - Not found")
Пояснение:
Если вы столкнулись с проблемой, UNIQUE constraint failed: auth_user.username
, то update_or_create
решит ее. Он обновит данные, если будут найдены существующие, в противном случае он создаст их.
Если пользователь существует
.username=username
, то обновите значения по умолчанию, иначе создайте нового пользователя со значениями по умолчанию