41

안녕하세요, 일부 필드 및 비밀번호 입력란에 django 모델 클래스를 사용하고 있습니다. 평소 일반 텍스트 대신에 암호 입력을 표시하려고합니다. 나는이 같은 모델 클래스를 생성 :django에서 비밀번호 입력 필드를 만드는 방법

class UserForm(ModelForm): 
    class Meta: 
     password = forms.CharField(widget=forms.PasswordInput) 
     model = User 
     widgets = { 
      'password': forms.PasswordInput(), 
     } 

그러나 나는 다음과 같은 오류가 점점 오전 : 나가서 설명하자면 NameError : 이름 '형태'가 정의되지 않습니다.

django 버전 1.4.0을 사용하고 있습니다. 나는이 링크를 따라 갔다 : Django password problems

여전히 같은 오류가 발생한다. 어떻게해야합니까? 어디에서 잘못되고 있습니까? 제발 도와주세요

+0

PasswordInput을 필드 정의로 사용하려고했는데 작동하지 않았습니다. 'widget = forms.PasswordInput'은 폼 작업을 만드는 트릭입니다. – anno1337

답변

50

수입에 다음을 포함해야합니다.

from django import forms 
+0

나는 그것을 시도했다. .. 나는 어떤 과실도 지금 얻지 않고있다. 하지만 암호 입력란에 동일한 텍스트 입력이 표시됩니다. 또한 질문을 아래로 투표하면 내 문제가 해결되지 않습니다. –

+17

@DarHamid 전 기술 지원이 아닙니다. 다른 문제가있는 경우 귀하의 질문에 답변했습니다 - 다른 질문을하십시오. 하지만 얼마 동안 혼자서 디버깅을 해봐야할까요? 어딘가에 한 쌍의 괄호를 놓칠 수 있습니까? 첫 번째와 두 번째 암호 필드가 같은 이름을 가질 수 없습니까? 시도하는 것이 가장 좋은 학습 방법입니다. – DrTyrsa

+0

답변에 감사드립니다. 그러나 나는 어떤 괄호도 그리워하지 않았다. 또한 modelForm.Thanks와 마찬가지로 모델 클래스에 암호 필드의 이름을 넣었습니다. 어떤 식 으로든 –

50

위젯은 속성이 아닌 함수 호출이어야합니다. 괄호가 누락되었습니다.

class UserForm(ModelForm): 
    password = forms.CharField(widget=forms.PasswordInput()) 
    class Meta: 
     model = User 
+0

괄호가 실제로 필요합니까? 모든 UserForm에 대해 다시 생성하는 대신 초기화하는 동안 PasswordInput 필드를 수정하면됩니다. – blacklwhite

+0

사실이 아닙니다. Django는 특별히 if isinstance (widget, type) : widget = widget()을 사용하여 이것을 처리합니다. – kibibu

+0

django가 암호 용 텍스트 필드를 만드는 이유는 무엇입니까? 그것의 명백한 비밀 번호 입력을위한 암호 필드가? – Clayton

13

@DrTyrsa가 맞습니다. 당신의 괄호를 잊지 마십시오.

from django.forms import CharField, Form, PasswordInput 

class UserForm(Form): 
    password = CharField(widget=PasswordInput()) 
12

모든 모델에서 사용할 수있는 고유 한 암호 필드를 만드는 것만으로는 안됩니다.

from django import forms 

class PasswordField(forms.CharField): 
    widget = forms.PasswordInput 

class PasswordModelField(models.CharField): 

    def formfield(self, **kwargs): 
     defaults = {'form_class': PasswordField} 
     defaults.update(kwargs) 
     return super(PasswordModelField, self).formfield(**defaults) 

는 이제 모델에 당신은 그것은 매우 간단

password = PasswordModelField() 
0

를 사용합니다.

password 양식 필드는 Meta 클래스가되어야합니다.

관련 문제