私はDjangoアプリにユーザー登録を実装しようとしています。読んだ本ではUserCreationFormに言及していますが、名前、パスワード、メールアドレス以外にも必要です。自分のユーザーオブジェクトを実装し、 ModelFormを使用しますが、認証のためのDjangoの便利さのいくつかを失います。最後に、私は推測するユーザーを補足するUserProfilesについて何かを読みました。ここに私がこれまでに持っているものがあります。
表示-これは非常に簡単です。ここでやりたいことは、フォームを作成してユーザーを保存することです
def main(request):
rform1 = forms.RegisterForm1()
rform2 = forms.RegisterForm2()
return render_to_response("authentication/index.html", {'form1': rform1, 'form2':rform2})
def register(request):
if request.method == 'POST':
rform1 = forms.RegisterForm1(request.POST)
rform2 = forms.RegisterForm2(request.POST)
if rform1.is_valid() and rform2.is_valid():
new_user = rform1.save()
return HttpResponseRedirect("/register-success/")
return render_to_response("authentication/index.html", {'form1': rform1,'form2':rform2})
フォーム-これはユーザーを作成するための私のフォームです。または少なくともそれの始まり
class RegisterForm1(forms.ModelForm):
class Meta:
model = User
class RegisterForm2(forms.ModelForm):
class Meta:
model = UserProfile
モデル-これは、ユーザーを補完するUserProfileです。
class UserProfile(models.Model):
user = models.OneToOneField(User)
phonenumber = PhoneNumberField()
私がやろうとしていることは明らかですか?私は正しい軌道に乗っていますか
twoモデルフォームを作成します。1つはUser
モデル用、もう1つはUserProfile
モデル用です。
class UserForm(Django.forms.ModelForm):
class Meta:
model = User
class UserProfileForm(Django.forms.ModelForm):
class Meta:
model = UserProfile
exclude = ['user']
プレフィックスを付けて、同じHTMLフォーム要素に一緒に表示します。ビューで、Userを保存してからUserProfileを保存する前に、両方が有効であることを確認します。
def register(request):
if request.method == 'POST':
uf = UserForm(request.POST, prefix='user')
upf = UserProfileForm(request.POST, prefix='userprofile')
if uf.is_valid() * upf.is_valid():
user = uf.save()
userprofile = upf.save(commit=False)
userprofile.user = user
userprofile.save()
return Django.http.HttpResponseRedirect(…something…)
else:
uf = UserForm(prefix='user')
upf = UserProfileForm(prefix='userprofile')
return Django.shortcuts.render_to_response('register.html',
dict(userform=uf,
userprofileform=upf),
context_instance=Django.template.RequestContext(request))
register.html
:
<form method="POST" action="">
{% csrf_token %}
{{userform}}
{{userprofileform}}
<input type="submit">
</form>
私はこれを調べていたところ、Djangoには非常にシンプルな組み込みの新しいユーザー作成フォームがあり、簡単な登録が必要な場合に使用できます-たとえば、 、メールアドレスを保存して検証するため、OPのユースケースでは機能しませんが、他の人がこの質問に出くわした場合にここに投稿し、簡単なものを探しています。
ユーザーがユーザー名とパスワードを選択できるようにしたい場合は、ビルトインがすべてを行います。ユーザー:
from Django.views.generic.edit import CreateView
from Django.contrib.auth.forms import UserCreationForm
urlpatterns = patterns('',
url('^register/', CreateView.as_view(
template_name='register.html',
form_class=UserCreationForm,
success_url='/'
)),
url('^accounts/', include('Django.contrib.auth.urls')),
# rest of your URLs as normal
)
自分でやらなければならないのはcreateregister.html...だけです。