Как создать пользователя в Django?
Я пытаюсь создать пользователя в моем приложении Django и React (полный стек), но мой views.py не может сохранить форму, которую я ему даю. Ниже код.
# Form folder
def Registration(request):
if request.method == 'POST':
form = UserForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
email = form.cleaned_data['email']
password = form.cleaned_data['password']
User.objects.create(
email = email ,
username = username,
password = password,
)
user = form.save()
login(request,user)
return redirect('/profile/')
else:
context = {"Error" : "Error during form loading"}
return render(request,'accounts/registration.html',context=context)
return render(request,'accounts/registration.html',context=context)
И это мой Forms.py
class UserForm(UserCreationForm):
username = forms.TextInput()
email = forms.EmailField()
password = forms.TextInput()
password2 = forms.TextInput()
class Meta:
model = User
fields = ("username", "email", "password", "password2")
def save(self, commit=True):
user = super(UserForm, self).save(commit=False)
if self.password != self.password2:
raise forms.ValidationError('Input unvalid')
elif commit:
user.save()
return user
В вашем модуле, где вы вызываете User на сервере django вы хотите вызвать что-то вроде
user = User.objects.create_user(username, email, password)
if not user:
raise Exception("something went wrong with the DB!")
Возможно, будет полезно прочитать django docs о User таблице, я дал ссылку непосредственно на часть, описывающую create_user() метод.
Приведенный выше блок if полезен для подтверждения того, что все работает так, как задумано.
Если вы хотите использовать подход UserCreationForm, то удалите вызов модели User. Это будет сделано за вас в UserCreationForm после сохранения и фиксации.
Таким образом, форма ветви if будет выглядеть следующим образом:
if form.is_valid():
user = form.save()
login(request, user)
return redirect('/profile/')
После того, как все заработает, вы также захотите написать модульный тест, который подтверждает, что пользователь был создан. Вы можете подтвердить это, сделав примерно следующее:
class UserTests(TestCase):
def test_logout_deletes_token(self):
# some stuff here that creates a single user
self.assertEqual(User.objects.count(), 1)