【发布时间】:2021-05-15 11:08:25
【问题描述】:
我正在尝试实现一个登录功能,这样用户就可以使用他们的电子邮件或电话号码或用户名登录,但是 Django 在它的用户模型中只提供电子邮件字段,所以我用 One 创建了另一个模型-To-One-Relation to User 模型并提供了电话号码列,但现在我不知道如何实现我之前提到的此类功能。
我的models.py
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
user_type = models.IntegerField(choices=USER_TYPE, default=3)
mobile = models.BigIntegerField(unique=True)
我的views.py
(我知道这是一团糟,但我不知道如何拥有这样的功能)
def login(request):
if request.method == "POST":
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
messages.success(request, 'You are logged in successfully!')
return redirect('/dashboard')
else:
user = auth.authenticate(profile_phone=username, password=password)
if user is not None:
auth.login(request, user)
messages.success(request, 'You are logged in successfully!')
return redirect('/dashboard')
else:
user = auth.authenticate(email=username, password=password)
if user is not None:
auth.login(request, user)
messages.success(request, 'You are logged in successfully!')
return redirect('/dashboard')
else:
messages.error(request, 'Invalid username or password')
return redirect('/login')
else:
if request.user.is_authenticated:
messages.success(request, 'You are already logged in')
return redirect("/dashboard")
return render(request, "accounts/login.html")
【问题讨论】:
标签: python django django-models django-views