2014-12-05 5 views
0

, 나는 등 성, birth_date 같은 추가 필드와 사용자 정의 사용자 모델을 가지고Django : 사용자 데이터 유효성 검사를 올바르게 처리하는 방법은 무엇입니까? 내 응용 프로그램에서

나는 보통 (REST API를, 장고 형태의 웹 서비스)/다른 방법을 사용하여 업데이트 사용자를 만들고,이 나는 수 있음을 의미 양식 유효성 검사를 통해 사용자 데이터의 유효성을 검사합니다.

그래서 사용자 확인을 가능한 한 깨끗하게 만드는 방법을 스스로에게 묻고있었습니다.

나는 사용자 클래스() 메소드 저장 재정의를하기로 결정 :

def save(self, *args, **kwargs): 

    # Will prevent from entering bad formated data. 
    self.full_clean() 

    # If birth_date provided, need to be younger than current date 
    if self.birth_date and self.birth_date > datetime.now().date(): 
     raise EXC_FUT_DATE 

    super(User, self).save(*args, **kwargs) 
  • 내가 확인하기 위해 먼저 full_clean() 메소드를 사용하는 사용자 필드의 요구 사항과 일치 제공된 데이터 (예 : 성별은 'M' 또는 'F'이어야 함)
  • 나는 과거의 생년월일입니까?

예상대로 작동하는 것으로 보이지만 여기서는 모범 사례를 따르지 않을 것입니다. 전체 목적은 DRY (한 곳에서 유효성 검사 로직을 가짐) 상태를 유지하는 것이며이 유효성 검사 로직은 장고 양식이나 웹 서비스를 사용하는 모든 사용자 생성/수정 작업에 사용됩니다.

이 패턴에 대한 의견이 있으십니까? 아마 다른 아이디어? 고마워.

답변

3

생성자 args가 사전이므로 Django 폼을 사용할 수 있습니다. 따라서 API에서 캡처 한 값으로 사전을 작성하고 양식을 인스턴스화 한 다음 is_valid() 메소드를 호출하십시오.

data = {'subject': 'hello', 
     'message': 'Hi there', 
     'sender': '[email protected]', 
     'cc_myself': True} 
f = ContactForm(data) 

from docs

+0

내가 내 모델 속성을 모두 가지고있는 형태를 가지고 있다고 가정한다. 그건 내 사건이 아니야. 모델 양식을 만들어야합니까? (예 :'class UserForm (ModelForm)'? 고마워요! –

+0

예, ModelForm이 유효성 검사를 수행합니다. 또한 [documentation] (https : // docs)에 따라 사용할 필드를 선택하는 것을 잊지 마십시오. – jabez

+1

고마워요. 처음부터 모든 유효성 검사를 다시 작성했고, 유효성 검사를'save() 안에 처리하는 것보다 훨씬 깔끔합니다.)'. –