Как создать пользователя в 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)
Вернуться на верх