我一直在努力使用 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 内置表单等。我能够创建超级用户,并且超级用户详细信息存储在数据库中,但是通过表单字段注册超级用户后的用户不会存储在数据库中。
在您的
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
。