2017-03-25 51 views
0

我正在嘗試創建一個新模型來跟蹤當前密碼和最近使用的最近一次使用的密碼。我希望它看起來像這樣原油例如:創建一個新表(模型)並將它與Django中的auth_user關聯

ID --- CUR_PASS --- PREV_PASS 
1 --- 123  --- 321 
2 --- 456  --- 654 

是否有可能使ID用戶名AUTH_USER表?

這裏是I類到目前爲止有:

# class model to store previously used passwords 
class oldPass(models.Model): 
    # username = models.ForeignKey('something') --> instead of ID? 
    current_pass = models.CharField(max_length=100) 
    prev_pass = models.CharField(max_length=100) 

    class Meta: # meta class to define the table name 
     db_table = "old_pass" 

我試圖讓它這樣我就可以有ID是用戶名和AUTH_USER更改密碼時,請回old_pass表,並比較確保它們不是的值。如果它是其中一個,則反饋一個錯誤。

我最大的問題是這些:

  1. 我不知道如何導入AUTH_USER這樣我就可以將用戶名分配到這個新表
  2. 我不知道如何更改ID爲用戶名而不是數字。 (這會使用ForeignKey的做什麼?)
  3. 我希望能夠以比較值的變量傳遞...#3

例子: - 我想執行User.set_password( 'pass')(以便傳遞被散列),然後我想在提交User.save()之前將此新密碼與'current_pass'和'prev_pass'進行比較。如果密碼匹配使用的密碼之一,我想中止。

我使用Django 1.9和Python 2.7.13

UPDATE 所以在看答案接收和研究的詳細信息...這是我的新類

from django.contrib.auth.models import User 
# class model to store previously used passwords 
class oldPass(models.Model): 
    # username = models.ForeignKey(User) --> instead of ID? 
    current_pass = models.CharField(max_length=100) 
    prev_pass = models.CharField(max_length=100) 

    class Meta: # meta class to define the table name 
     db_table = "old_pass" 
+0

我不明白你在問什麼。爲什麼不只是'models.ForeignKey('auth.User')'?爲什麼你需要這個「ID」(無論你是什麼意思)? –

+0

這很公平,我覺得我沒有清楚地解釋這一點。我想讓ID字段成爲用戶名,而不是普通的1,2,3,4等佈局。我從下面的L.Xiao的回答中知道,ID字段並不是我想的那麼重要。我真的想有3個字段,用戶名,current_pass,prev_pass ..並設置用戶名,我想從auth_user表中拉出它。 –

回答

0
  1. from django.conf import settingssettings.AUTH_USER_MODEL是您的auth_user模型。

  2. 使用像這樣的自定義標識id = models.CharField(primary_key=True)。但大多數情況下,ID應該是一個毫無意義的領域。

  3. 您可以在執行User.set_password('pass')之前檢查密碼。

models.py

class oldPass(models.Model): 
    user = models.ForeignKey(`settings.AUTH_USER_MODEL`) 
    current_pass = models.CharField(max_length=100) 
    prev_pass = models.CharField(max_length=100) 

    class Meta: 
     db_table = "old_pass" 

views.py

if oldPass.objects.filter(user=user, pre_pass='pass').exists(): 
    raise Error 
user.set_password('pass') 
user.save() #at the same time, update user's password in oldPass 
+0

我很欣賞答案,#1絕對有幫助。我會通過類似'username = models.AUTH_USER_MODEL.username'的方式分配一個用戶名變量嗎?至於#3,我不確定你的意思是什麼..你只是確認我的例子#3?謝謝 –

+0

我編輯我的答案並添加一些代碼 – Guinner

+0

感謝您的更新,我已將我的新課程添加到我的問題中。最後一個問題,我如何導入我的新課程? '從django.models導入OldPass'? –

相關問題