Django - 注册时,注册数据未保存在数据库中,因此无法执行登录

问题描述 投票:0回答:1

我一直在努力使用 Django 进行用户注册和登录。我为此使用 AbstractUser 。每当我输入表单字段并单击“注册”时,页面都不会重定向,并且输入的数据不会保存在数据库中

这是我的观点.py

    def register(request):

        if request.method == "POST":
            print("method is post")
            form = UserRegisterForm(request.POST or None)
            if form.is_valid():
                print("form is valid")
                form.save()
                username = form.cleaned_data.get("username")
                messages.success(request, f"hey {username}, account created successfully")
                new_user = authenticate(username=form.cleaned_data['email'],
                                    password=form.cleaned_data['password1'])
                login(request, new_user)
                return redirect("jew_app:home")
            else:
                print(form.errors)
        else:
            print("user can't be registered")

        form = UserRegisterForm()

        context = {
            'form': form
        }
        return render(request, 'user/register.html',  context)


    def user_login(request):
        if request.user.is_authenticated:
            messages.warning(request, f"Hey you are already logged in")
            return redirect("accounts:profile")

        if request.method == "POST":
            email = request.POST.get("email")
            password = request.POST.get("password")

            try:
                user = User.objects.get(email=email)
                user = authenticate(request, email=email, password=password)

                if user is not None:
                    login(request, user)
                    messages.success(request, "You are logged in")
                    return redirect("jew_app:home")
                else:
                    messages.warning(request, "User Does Not Exist. Create an account")

            except:
                messages.warning(request, f"User with {email} does not exist")

        context = {

        }

        return render(request, 'user/login.html', context)

模型.py

    class User(AbstractUser):
        email = models.EmailField(unique=True, null=False)
        username = models.CharField(max_length=100)
        dob = models.DateField(null=True, blank=True)
        mobile_number = models.CharField(max_length=10, null=True, blank=True)


        USERNAME_FIELD = "email"
        REQUIRED_FIELDS = ['username']

        def __str__(self):
            return self.username

我尝试了 Django 内置表单等。我能够创建超级用户,并且超级用户详细信息存储在数据库中,但是通过表单字段注册超级用户后的用户不会存储在数据库中。

django django-forms django-authentication django-auth-models django-userena
1个回答
0
投票

在您的

register()
视图中,您必须创建一个用户条目。请遵循文档

User.objects.create_user("john", "[email protected]", "johnpassword")
user = authenticate(...)
if user:
    # Do something with the authenticated user...
else:
    # Do something in case of wrong login...

电子邮件是可选的,但需要用户名

john
和密码
johnpassword

© www.soinside.com 2019 - 2024. All rights reserved.