1

私の django プロジェクトでは、登録機能を追加する必要があります。問題は、登録プロセスで「ユーザープロファイル」をどこでも使用できないことです。私のユーザーは、「名」、「姓」、およびその他のデータによって定義されます。これを達成する方法は?contrib.auth と「登録」を有効にすることとは別に、「ユーザー」アプリケーションを作成しました。user.models には、フィールドを追加した拡張ユーザー モデルがあります。user.forms で、拡張登録フォームを作成しました:

class ExtendedRegistrationForm(RegistrationForm):
    first_name = forms.CharField(
        label="First name", 
        error_messages={'required': 'Please fill the first name field'},
        )
    last_name = forms.CharField(
        label="Last name",
        error_messages={'required': 'Please fill the last name field'},
        )

    def save(self, profile_callback=None):
        user = super(ExtendedRegistrationForm, self).save()
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.save()

user.views には、カスタム登録ビューがあります。

def custom_register(request, success_url=None,
           form_class=ExtendedRegistrationForm, profile_callback=None,
           template_name='registration/registration_form.html',
           extra_context=None):

    def _create_profile(user):                
        p = UserProfile(user=user)
        p.is_active = False
        p.first_name = first_name
        p.last_name = last_name
        p.save()

    return register(request, 
        success_url="/accounts/register/complete",
        form_class=ExtendedRegistrationForm,
        profile_callback=_create_profile,
        template_name='registration/registration_form.html',
        extra_context=extra_context,
        )

また、プロジェクトの登録 URL をオーバーライドしました。

url(r'^accounts/password/reset/$',
       auth_views.password_reset, { 'post_reset_redirect' : '/',
       'email_template_name' : 'accounts/password_reset_email.html' },
       name='auth_password_reset', ),
url(r'^accounts/password/reset/confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
       auth_views.password_reset_confirm, { 'post_reset_redirect' : '/accounts/login/'},
       name='auth_password_reset_confirm'),
url(r'^accounts/password/reset/complete/$',
       auth_views.password_reset_complete,
       name='auth_password_reset_complete'),
url(r'^accounts/password/reset/done/$',
       auth_views.password_reset_done,
       name='auth_password_reset_done'),
url(r'^accounts/register/$',
    'user.views.custom_register',
    name='registration_register'),
(r'^accounts/', include('registration.urls')),

だから私は始めるのに良いベースを持っていますが、どうすれば「ユーザー名」を取り除くことができますか? username を first_name (同じ名前のユーザーが非常に多い) として扱うことはできますか? それとも django は文句を言いますか?

4

2 に答える 2

0

first_name と last_name に基づいて、保存時にユーザー名を生成しないのはなぜですか?

于 2010-07-10T00:04:33.127 に答える
0

これに取り組む必要があったとき、最も簡単な方法は、登録プロセスに「拡張ユーザー プロファイル」を含めないことです。初めてログインするときは、リダイレクトするかメッセージを送信してフォームに入力します。これで、少なくとも作業を進めることができます。私はすぐにこれに取り組むつもりなので、より具体的な解決策を見つけたら投稿します.

ユーザー名にアクセスできないということの意味もまだわかりません...これはauth.models.Userの一部であるため、利用可能です。ユーザーですでに利用可能な基本的なフィールドを無視していますか?...

于 2010-07-07T19:09:54.787 に答える