J'essaie d'implémenter l'enregistrement utilisateur pour mon Django. Le livre que j'ai lu mentionne UserCreationForm mais j'ai besoin de plus que du nom, du mot de passe et de l'adresse e-mail. Je pourrais implémenter mon propre objet utilisateur et utiliser ModelForm je pense, mais ensuite je perds certaines des commodités Django pour l'authentification. Enfin, j'ai lu quelque chose sur les profils d'utilisateurs qui complètent les utilisateurs, je suppose, donc je pense que j'ai besoin d'une combinaison de tous de ces choses. Voici ce que j'ai jusqu'à présent.
Vue - c'est assez simple. Tout ce que je veux faire ici, c'est créer mon formulaire et enregistrer l'utilisateur
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})
Formulaire - c'est mon formulaire pour créer un utilisateur. Ou du moins au début
class RegisterForm1(forms.ModelForm):
class Meta:
model = User
class RegisterForm2(forms.ModelForm):
class Meta:
model = UserProfile
Modèle - c'est mon profil utilisateur avec lequel je veux compléter l'utilisateur.
class UserProfile(models.Model):
user = models.OneToOneField(User)
phonenumber = PhoneNumberField()
Est-ce clair ce que j'essaie de faire? Suis-je sur la bonne voie
Créez des modèles deux, un pour le modèle User
et un pour le modèle UserProfile
.
class UserForm(Django.forms.ModelForm):
class Meta:
model = User
class UserProfileForm(Django.forms.ModelForm):
class Meta:
model = UserProfile
exclude = ['user']
Donnez-leur des préfixes et affichez-les ensemble dans le même élément de formulaire HTML. Dans la vue, vérifiez que les deux sont valides avant d'enregistrer l'utilisateur, puis le profil utilisateur.
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))
Dans register.html
:
<form method="POST" action="">
{% csrf_token %}
{{userform}}
{{userprofileform}}
<input type="submit">
</form>
J'étais juste en train de regarder cela et j'ai découvert que Django a un très simple formulaire de création d'utilisateur intégré, que vous pouvez utiliser si vous voulez un enregistrement simple - il n'y a pas d'option, par exemple , enregistrez une adresse e-mail et validez-la, donc cela ne fonctionnera pas pour le cas d'utilisation de l'OP, mais je la poste ici au cas où d'autres rencontreraient cette question comme moi, et recherchent quelque chose de simple.
Si vous voulez juste que les gens puissent choisir un nom d'utilisateur et un mot de passe, alors les intégrés feront tout pour vous , y compris la validation et l'enregistrement du nouveau utilisateur:
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
)
Donc, la seule chose que vous avez à faire vous-même est de créer register.html ...
Plus d'informations ici: http://www.obeythetestinggoat.com/using-the-built-in-views-and-forms-for-new-user-registration-in-Django.html