python - 我如何检查 Django 中是否存在用户名和电子邮件

标签 python django python-3.x email

我刚开始学习 Django。我做了一个注册表。它工作得很好。但是我无法检查此注册表中是否存在用户名和邮件。如果我尝试使用相同的用户名注册,我会收到(1062,“Duplicate entry 'asdasd' for key 'username'”)错误。 (asdasd 我的用户名..)

我该如何解决这个问题?

表单.py

from django import forms
class RegisterForm(forms.Form):
    username = forms.CharField(required=True, max_length=20, label= "Kullanıcı Adı")
    email = forms.EmailField(required=True, label="E-Mail")
    password = forms.CharField(max_length=20, label= "Password", widget=forms.PasswordInput)
    confirm = forms.CharField(max_length=20, label="RePassword",widget=forms.PasswordInput)
def clean(self):
    username = self.cleaned_data.get("username")
    email = self.cleaned_data.get("email")
    password = self.cleaned_data.get("password")
    confirm = self.cleaned_data.get("confirm")


    if password and confirm and password != confirm:
        raise forms.ValidationError("Passwords dont match")

    values = {
        "username" : username,
        "email" : email,
        "password" : password,
    }
    return values

View .py

from django.shortcuts import render, redirect
from .forms import RegisterForm
from django.contrib import messages
from django.contrib.auth.models import User
from django.contrib.auth import login


def register(request):

    form = RegisterForm(request.POST or None)

    if form.is_valid():
        username = form.cleaned_data.get("username")
        email = form.cleaned_data.get("email")
        password = form.cleaned_data.get("password")
        newUser = User(username=username)
        newUser.email = email
        newUser.set_password(password)
        newUser.save()
        login(request, newUser)
        messages.success(request,"Successful on Register")
        return redirect("index")
    context = {
        "form": form
    }
    return render(request, "register.html", context)


def loginUser(request):
    return render(request, "login.html")

def logoutUser(request):
    return render(request, "logout.html")

非常感谢!

最佳答案

最直接的方法是将方法添加到您的表单类

def clean_username(self):
    if User.objects.filter(username=username).exists():
        raise forms.ValidationError("Username is not unique")

def clean_email(self):
    if User.objects.filter(email=email).exists():
        raise forms.ValidationError("Email is not unique")

关于python - 我如何检查 Django 中是否存在用户名和电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53115349/

相关文章:

python - ReportLab:大字体的文本挤在段落中

python - 使用变形的相关/级联输入

python - 我可以同时使用 pip 和 easy_install 还是会发生冲突?

django - 如何在django列表中添加序列号?

django - 无法执行 gunicorn_start EACCES

python - 如何在事件循环中将协程打包为普通函数?

python - 如何选择添加到 Pandas Dataframe 的行并将其删除?

ruby-on-rails - Django相当于“rake rails:freeze:gems”和“rake gems:unpack”

python - 将 PanedWindow 分隔符 "snap"放置到某些位置,而不是只允许用户选择任何随机位置

python - 如何将代码分配给条形图中的 xlabel