2013-11-26 126 views
1

我是新来的django,我有一个模型,持有有关帐户用户名密码密码盐的信息。自定义登录Django

models .py - 在字段上有一些RegExValdation。

class modelName(models.Model): 
    username = models.CharField(max_length=128, unique=True) 
    password = models.CharField(max_length=128) 
    password_salt = models.CharField(max_length=128, unique=True, default=salt_generate) 

我想取密码和Sha1Hash它与password_salt字段。我一直在搜索和搜索,但我似乎无法找到一种方法来做到这一点。模型中可以这样做吗?

** password_salt是一个随机生成的小写字符串&带数字的大写字母。

def salt_generate(): 
    while 1: 
     from django.conf import settings 
     import random, string 
     pass_salt = ''.join(random.choice(string.ascii_uppercase + string.digits + string.ascii_lowercase) for x in range(32)) 
     try: 
      Merchant.objects.get(password_salt=pass_salt) 
     except: 
      return pass_salt 

有了这个模型,我想用这个模型的用户名和密码登录一个用户。

我有点难住,因为如何做到这一点可能有人请指出我在正确的方向我似乎已经停留在这一段时间了。

我一直在关注本教程https://www.youtube.com/watch?v=CFypO_LNmcc&list=PLxxA5z-8B2xk4szCgFmgonNcCboyNneMD 但我似乎无法得到它的工作。

+1

首先,为什么你想从头开始实现,您自己的帐户模型当Django已经有了内置[用户模型(https://docs.djangoproject.com/en/1.5/ref /contrib/auth/#django.contrib.auth.models.User)可供你使用? – mariodev

+0

因为我被要求这样做。 –

回答

0

请永远不要执行您自己的密码散列/用户代码。从统计学上讲,你会错误的。从Django的1.5起,你可以简单地导入BaseUse

from django.contrib.auth.models import AbstractUser 

class YourUser(AbstractUser): 
    my_field = TextField() 

,然后在你的设置

AUTH_USER_MODEL = 'yourapp.YourUser' 

现在,您不必担心密码或散列或安全。他们由非常聪明的人建立django照顾,第三方应用生态系统的其余部分也会和你的项目一起玩。

REF:

+0

是否有可能拥有Django用户管理模型以及我的自定义用户模型? –

+0

这种方式将包含django.contrib.auth用户模型。本质上你的用户模型将成为系统的用户模型。我希望两者都有,我会建议使用普通模型子类化子类化Django用户模型,然后每个YourUser将是一个用户,但不是每个用户都将是YourUser。这可能更接近你实际需要的,或者不是。最后,你总是可以完全省略'AUTH_USER_MODEL'设置,然后确实会拥有独立存在的vanilla auth.User模型和你自己的模型,但是你将获得auth的所有安全特性。 – Thomas