Django 2.0 User_Auth - >检查用户名和电子邮件是否存在的最佳做法

时间:2018-02-11 01:29:44

标签: python django authentication

在我的Django项目中,电子邮件和用户名必须是唯一的。

我想检查它们是否存在,但是Django 用户模型并没有提供像

这样的方法 遗憾的是,

.filter().count().exists()。 (我不知道为什么。)

django.contrib.auth - User

def signup(request):
    if request.method == 'POST':
        username= request.POST['username']
        email = request.POST['email']
        password = request.POST['password']

        user = User.objects.create_user(username=username, email=email, password=password)
        user.save()
        return HttpResponse(status=200)
    else:
        """Return template with sign up page."""
        return render(request, "account/account_signup.html")

我想以下面的方式检查,因为我需要单独的HTTP响应代码。

if User.objects.filter(username=username).count() > 0:
    return HttpResponse(status=401)

if User.objects.filter(email=email).count() > 0:
    return HttpResponse(status=402)

我知道,当我尝试创建现有用户名时,Django会向我提出错误:

    return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: UNIQUE constraint failed: auth_user.username

但我想在views层中查看它。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

Django用户模型管理器与其他模型具有相同的方法。因此,您可以使用此方法检查现有用户名或电子邮件(类似于您的代码,但使用.exists(),以避免计数操作)。

if User.objects.filter(email=email).exists():
    return HttpResponse(status=401)