2013-11-26 188 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