当前位置: 首页 > 知识库问答 >
问题:

django中已存在带有此电子邮件的模型

池兴邦
2023-03-14

我制作了一个自定义用户模型。注册和注销工作正常。但我已经使用该模型制作了一个登录表单。我的型号是usersignupmodel。但无论何时在注册后,如果我尝试登录,它都会给我一个类似于用户注册模型的错误,该电子邮件已经存在 我找不到问题,请帮助。

模型。派克

from django.db import models

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager


class SignUpManager(BaseUserManager):
    def create_user(self, email,age,name, username, password=None):
        #if not email:
            #raise ValueError("insert user")
        if not username:
            raise ValueError("insert username")
        if not name:
            raise ValueError("insert name")
        if not age:
            raise ValueError("insert age")
        user = self.model(
           email=self.normalize_email(email),
           username=username,
           age=age,
           name=name,
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self,email,name,age,username, password):
        user = self.create_user(
            email=self.normalize_email(email),
            username=username,
            password=password,
            age=age,
            name=name,
        )
        user.is_admin = True
        user.is_staff = True
        user.is_superuser = True

        user.save(using=self._db)
        return user


class UserSignupModel(AbstractBaseUser):
    email = models.EmailField(verbose_name="email", max_length=60,unique=True)
    age = models.CharField(max_length=15)
    name = models.CharField(max_length=15)
    username = models.CharField(max_length=15, unique=True)
    date_joined = models.DateTimeField(verbose_name="date joined", auto_now_add=True)
    last_login = models.DateTimeField(verbose_name="last login", auto_now=True)

    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)

    USERNAME_FIELD = "username"
    REQUIRED_FIELDS = ['email','name','age']
    objects = SignUpManager()

    def __str__(self):
        return self.name

    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True
#migrate --run-syncdb in case no work

形式。派克

from django import forms

from django.contrib.auth.forms import UserCreationForm
from diabetes.models import UserSignupModel
from django.contrib.auth import login,authenticate,logout


class UserSignupForm(UserCreationForm):
    email=forms.EmailField(max_length=60,help_text="add a valid email address",required=True)
    name=forms.CharField(max_length=15,help_text="add a valid name")
    age=forms.CharField(max_length=15)

    class Meta:
        model=UserSignupModel
        fields=('email','name',"username",'age',"password1","password2")


class UserLoginForm(forms.ModelForm):
    password=forms.CharField(label="password",widget=forms.PasswordInput)

    class Meta:
        model=UserSignupModel
        fields=("email","password")

        def clean(self):
            if self.is_valid():

                email=self.cleaned_data['email']
                password=self.cleaned_data['password']

                if not authenticate(email=email,password=password):
                    raise forms.ValidationError("Invalid LOGIN")

意见。派克

from django.shortcuts import render,redirect
from django.contrib.auth import login,authenticate,logout
from diabetes.forms import UserSignupForm,UserLoginForm


def home(request):
    return render(request,'diabetes/home.html')

def signupuser(request):
    context={}
    if request.POST:
        form=UserSignupForm(request.POST)
        if form.is_valid():
            form.save()
            email=form.cleaned_data.get('email')
            raw_password=form.cleaned_data.get('password1')
            name=form.cleaned_data.get('name')
            age=form.cleaned_data.get('age')
            username=form.cleaned_data.get('username')

帐户=验证(电子邮件=电子邮件,密码=raw_password,名称=姓名,年龄=年龄,用户名=用户名)登录(请求,帐户)返回重定向('home')其他:上下文["reg_form"]=表单

    else:
        form = UserSignupForm()
        context["reg_form"] = form
    return render (request,'diabetes/signupuser.html',context)


def logoutuser(request):

    logout(request)
    return redirect('home')

def loginuser(request):
    context={}

    user=request.user
    if user.is_authenticated:
        return redirect('home')

    if request.method=="POST":
        form=UserLoginForm(request.POST)
        if form.is_valid():

            password=request.POST["password"]
            email=request.POST["email"]
            user=authenticate(password=password,email=email)

            if user:
                login(request,user,)
                return redirect("home")

    else:
        form=UserLoginForm()


    context['form']=form
    return render(request,"diabetes/loginuser.html",context)

登录用户。html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form method="POST">
    {% csrf_token %}
    {% for field in form %}
        <p>

        {{ field.label_tag }}
        {{ field}}
        {% if field.help_text %}
             <small>{{ field.help_text }}</small>
        {% endif %}
        {% for field in form %}
         {% for error in field.errors %}
             <strong>{{ error }}</strong>
             {% endfor %}
        {% endfor %}
        {% if form.non_field_errors %}
             <small>{{ form.non_field_errors}}</small>
        {% endif %}
        </p>
    {% endfor %}

    <input type="submit">SUBMIT</input>
</form>

</body>
</html>

共有1个答案

梁磊
2023-03-14

您可以尝试删除以下行:

form=UserLoginForm(request.POST)
if form.is_valid():

您使用相同的模型定义了登录和注册,因此有效在注册后应失败。表单验证模型以创建新实例,这就是您出现此错误的原因。

 类似资料:
  • 问题内容: 我的网站已设置为没有用户名(或者说user.username = user.email)。如果用户尝试输入数据库中已经存在的用户名,则Django会显示一条错误消息,但是由于我没有使用用户名进行注册,所以我不知道该怎么做。 就像已经有默认设置一样,我不想重新加载页面以查找是否已经有与用户关联的电子邮件地址。我的猜测是使用Ajax,但我不知道该怎么做。Ive看过其他帖子,但最近似乎没有任

  • 问题内容: 我编写了一个向新闻稿库添加电子邮件的功能。直到我添加了已发送电子邮件的有效性检查,它都可以正常工作。现在,每次我得到“错误的电子邮件”作为回报。有人可以在这里看到任何错误吗?使用的正则表达式为: 并且它是100%有效的(http://gskinner.com/RegExr/),但是我可能使用它是错误的,或者它可能是一些逻辑错误: 问题答案: 这是的一部分,你可能会觉得很有趣:) 因此,

  • 我试图从我的应用程序发送电子邮件,我在android上的电子邮件客户端中看到了应有的链接,但当我检查电子邮件接收器时,没有链接。 这是我的代码: “文本”是html。 谢谢你。

  • 问题内容: 但是我已经尝试了一天多了,以获取与Django一起使用的电子邮件。 我收到此错误消息:当我尝试发送电子邮件时 这是我创建电子邮件并尝试在其视图中发送的地方: 我的设置文件如下: 我尝试过使用进行测试发送python -m smtpd -n -c DebuggingServer localhost:1025并获得了成功,但是当最终归结为真正却没有成功时。 当我尝试从外壳执行send_ma

  • 我需要在我的应用程序中集成邮件服务。我的应用程序应该发送电子邮件,其中必须附上。pdf文件(详细报告)。PDF文件现在位于远程服务器上。 有人能帮我理解如何在黑莓手机上发送带有pdf附件的邮件吗?如果实施是可行的,那么我将如何实施? 以下是我从Blackberry知识库论坛获得的用Blackberry发送邮件的链接 如何-创建附件 如何创建和发送消息

  • 问题内容: 问题答案: $config = Array( ‘protocol’ => ‘smtp’, ‘smtp_host’ => 'ssl://smtp.googlemail.com’, ‘smtp_port’ => 465, ‘smtp_user’ => ‘xxx’, ‘smtp_pass’ => ‘xxx’, ‘mailtype’ => ‘html’, ‘charset’ => ‘iso-8