0

登録フォームを作成します:

#urls.py
from django.conf.urls import patterns, url
from django.views.generic import TemplateView
from account.views import Register

urlpatterns = patterns('',
    url(r'^register/$', Register.as_view(template_name='account/register.html')),
)

#views.py
from django.views.generic import CreateView
from django.contrib.auth.models import User

class Register(CreateView):
    model = User
    success_url = '/account/'

そして、私は質問があります:その電子メールを必須にする方法を追加するにはどうすればよいですか(今は、ユーザー名、パスワード、および2回の時間を入力するだけです)。

@edit
そして、どのようにパスワードを「修復」しますか? (このフォームで) ユーザーを作成してから管理パネルに移動すると、ユーザーに「パスワード形式が無効であるか、ハッシュ アルゴリズムが不明です。」と表示されます。どうすればこれを修復できますか?

4

2 に答える 2

2

電子メールが必要ない理由は、基礎となるモデルModelFormから多くの手がかりを得る を使用しているためです。User具体的には、required=True属性がemailモデルのフィールドに存在しません。

1 つの解決策は、必要な属性を備えた独自のフォームを作成することです。たとえば、ModelForm を使用して、必要な電子メール フィールドを追加します。

別の解決策、そしておそらくより良い解決策は、質問へのコメントで Aamir Adnan が述べたように、 django-registration のようなものを使用することです。それはあなたのために物事を大幅に簡素化します。

あなたが行っている限りrepair password、パスワードを生の文字列値に設定することはできませんCreateView. パスワードを設定するにはuser.set_password(raw_string)、ハッシュとソルトを処理する を呼び出す必要があります。組み込みのUserCreationFormがどのように機能するかを確認し、ライブラリを使用するのではなく、自分でフォームを作成することに決めた場合は、それを模倣してみてください (そうすべきではありません)。

于 2013-01-12T00:40:35.937 に答える
0

これら 2 つの問題を解決するには、次のような形式を使用できます。

class UserCreationForm(forms.ModelForm):    
    class Meta:
        model = User

    def __init__(self, *args, **kwargs):
        super(UserCreationForm).__init__(*args, **kwargs)
        self.fields['email'].required = True

    def save(self, commit=True):
        user = super(UserCreationForm, self).save(commit=False)
        user.set_password(self.cleaned_data["password"])
        if commit:
            user.save()
        return user

class Register(CreateView):
    model = User
    form_class = UserCreationForm
    success_url = '/account/'

ただし、ユーザー名の重複などの問題は他にもあります。

于 2013-01-12T10:06:08.937 に答える