2009-08-25 7 views
1

저는 Python에서 Django로 플레이어 모델 클래스를 작성하고 있는데, 암호 멤버에 약간의 문제가있었습니다. 할당 할 때 암호가 자동으로 해시되고 싶지만 할당 연산자 나 기타에 과부하가 걸리지는 않습니다. password의 할당을 오버로드하여 자동으로 hashlib.md5(password).hexdigest()을 수행 할 수있는 방법이 있습니까?클래스 멤버의 할당을 어떻게 오버로드 할 수 있습니까?

from django.db import models 

class Player(models.Model): 
    name = models.CharField(max_length=30,unique=True) 
    password = models.CharField(max_length=32) 
    email = models.EmailField() 
+0

왜 명시 적으로하지 않습니까? – SilentGhost

+0

그것은 고통이고 Django 자동 관리자는 그것을하지 않기 때문에. – Electro

+0

고통? 코드에 다른 행을 추가 하시겠습니까? 당신이 이미 가지고있는 라인. – SilentGhost

답변

6

입력란에 속성을 사용하고 설정기를 재정의 할 수 없습니까?

django documentation에서 인용 :

from django.db import models 

class Person(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 

    def _get_full_name(self): 
     return "%s %s" % (self.first_name, self.last_name) 

    def _set_full_name(self, combined_name): 
     self.first_name, self.last_name = combined_name.split(' ', 1) 

    full_name = property(_get_full_name) 

    full_name_2 = property(_get_full_name, _set_full_name) 
+0

"등록 정보"는 파이썬 용어의 이상한 비트 중 하나입니다.이 용어는 새로운 언어 사용자에게 어려움을 겪고 있습니다. Krzyk의 예제에서 볼 수 있듯이 "getter"및 "setter"함수 (및 "delete-er"함수도)를 만들고 "property()"호출 결과에 클래스 속성을 바인딩하면 (getter를 필수 인수와 선택적 setter 및 deleter) ...이 속성에 대한 모든 액세스가 이제는 속성 함수에 의해 조정됩니다. –

0

당신은 내가 SQLAlchemy의 위해 만든 HashedProperty 클래스를 사용할 수 있습니다. 장고와 함께 다음과 같이 사용할 수 있습니다 :

class Player(models.Model): 
    name = models.CharField(max_length=30,unique=True) 
    password_hash = models.CharField(max_length=32) 
    password_salt = models.CharField(max_length=32) 
    password = HashedProperty('password_hash', 'password_salt', 
        hashfunc=salted_hexdigest(hashlib.md5), 
        saltfunc=random_string(32)) 
    email = models.EmailField() 
관련 문제