繁体   English   中英

Django中的用户身份验证

[英]User Auth in Django

我上周开始学习Django,我认为最好的方法就是构建一个App。 我现在在测试中使用了User Auth模块。 也许有人可以帮帮我:我想在数据库中对员工进行建模,然后将其放入“用户身份验证”模型中,因此我构建了该模型,并在进行了几次检查之后将其添加到“用户”中。

class Employee(models.Model):

session = models.ForeignKey(
    'sessions.Session',
    verbose_name='Session',
    blank=True, null=True,
)
email = models.CharField(max_length=255)
password1 = forms.CharField(max_length=30, widget=forms.PasswordInput()) #render_value=False
password2 = forms.CharField(max_length=30, widget=forms.PasswordInput())
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
region = models.ForeignKey(Region, on_delete=models.CASCADE)
workgroup = models.ForeignKey(Workgroups, on_delete=models.CASCADE)
user_since = models.DateTimeField('Signed up since', default=timezone.now())
rights = models.IntegerField(default=0)

def __str__(self):
    return self.email

def clean_username(self): # check if username dos not exist before
    try:
        User.objects.get(username=self.cleaned_data['email']) #get user from user model
    except User.DoesNotExist :
        return self.cleaned_data['email']

    raise ValidationError("this user exist already")

def clean(self): # check if password 1 and password2 match each other
    if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:#check if both pass first validation
        if self.cleaned_data['password1'] != self.cleaned_data['password2']: # check if they match each other
            raise ValidationError("passwords dont match each other")

    return self.cleaned_data

def dosave(self): # create new user
    new_user=User.objects.create_user(self.cleaned_data['username'],
                              self.cleaned_data['email'],
                              self.cleaned_data['password1'])
    new_user.save()
    return new_user

因此,接下来我写了一些测试,其中一个如下:

myuser = Employee.objects.create(first_name='Annie',
                                     last_name='Levers', email='annielevers@test.com',
                                     region=mymun, workgroup=mygroup, user_since=timezone.now())
    self.assertEquals(
        str(myuser),
        'annielevers@test.com',
    )

    # Check user.auth db
    userpk = myuser.id
    user = get_object_or_404(User, pk=userpk)
    user.set_password('abcxyz123')
    user.save()

当我运行此测试时,python在User中找不到userpk的条目,但给了我404对象。

有任何想法吗? 非常感谢!

如果要创建自定义用户模型,则应使用AbstractBaseUser。

https://docs.djangoproject.com/es/1.9/topics/auth/customizing/#specifying-a-custom-user-model

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM