web-dev-qa-db-ja.com

djangoでパスワード入力フィールドを作成する方法

こんにちは、Djangoモデルクラスとフィールドとパスワードフィールドを使用しています。通常のプレーンテキストを表示する代わりに、パスワード入力を表示します。次のようなモデルクラスを作成しました。

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

しかし、次のエラーが表示されます:NameError:name 'forms'は定義されていません。

私はDjangoバージョン1.4.0を使用しています。このリンクをたどりました: Djangoパスワードの問題

それでも同じエラーが発生します。私は何をすべきか。どこで問題が発生していますか?

54
Dar Hamid

インポートには次を含める必要があります。

from Django import forms
55
DrTyrsa

ウィジェットはプロパティではなく関数呼び出しである必要があります。括弧がありません。

class UserForm(ModelForm):
    password = forms.CharField(widget=forms.PasswordInput())
    class Meta:
        model = User
60
Burhan Khalid

すべてのモデルで使用できる独自のパスワードフィールドを作成しないでください。

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()
16
Karol Jochelson

@DrTyrsaは正しいです。括弧を忘れないでください。

from Django.forms import CharField, Form, PasswordInput

class UserForm(Form):
    password = CharField(widget=PasswordInput())
14
Keith

追加のインポートなしでフォローしました

from Django import forms
class Loginform(forms.Form):
    attrs = {
        "type": "password"
    }
    password = forms.CharField(widget=forms.TextInput(attrs=attrs))

アイデアは、フォームのソースコードから得られます。 https://docs.djangoproject.com/en/2.0/_modules/Django/forms/fields/#CharField

4
Te ENe Te

この質問は数年前に尋ねられたものであり、検索結果で十分に索引付けされているため、この回答は同じ問題でここに来る一部の人々を助けるかもしれませんが、より新しいDjangoバージョン。

私はDjango 1.11を使用していますが、Django 2.0でも動作します。


モデルユーザーを使用していることを考慮して、DjangoのデフォルトのUser()モデルを使用していると仮定します。

User()モデルにはすでにパスワードフィールドがあるため、ウィジェットを追加するだけです。

from Django import forms
from Django.contrib.auth.models import User

# also, it will work with a custom user model if needed.
# from .models import User


class UserRegistrationForm(forms.ModelForm):

    class Meta:
        model = User
        fields = ['username', 'password']

        widgets = {
            # telling Django your password field in the mode is a password input on the template
            'password': forms.PasswordInput() 
        }

ドキュメントを確認

私はDjangoを初めて使用します。答えが十分に正確でない場合は、お知らせください。後で編集します。

2
Jesus Lemus

password = forms.Charfield(widget=forms.PasswordInput)のOPによって書かれたものは正しかった。 class Meta:セクションに属していません。代わりに、class UserForm....の1レベル下にインデントして、その上にある必要があります.

0
Fr George

とても簡単です。

passwordクラスからMetaフォームフィールドを取得する必要があります。

0
minmaxavg