2010-08-19 4 views
33

J'essaye d'implémenter l'enregistrement d'utilisateur pour mon application Django. Le livre que je lis 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 sur certaines commodités django pour l'authentification. Enfin, j'ai lu quelque chose à propos de UserProfiles qui complètent les utilisateurs, je suppose, donc je pense que j'ai besoin d'une combinaison de toutes ces choses. Voici ce que j'ai jusqu'ici.Meilleure façon de faire enregistrer un utilisateur dans Django

Vue - c'est assez simple. Tout ce que je veux faire ici est de créer ma forme et enregistrez 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}) 

Form - c'est ma forme pour créer un utilisateur. Ou le début au moins

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

class RegisterForm2(forms.ModelForm): 
    class Meta: 
     model = UserProfile 

Modèle - ceci est mon UserProfile que je veux compléter l'utilisateur avec.

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

Répondre

29

Make deux modèles de formulaires, un pour le modèle User et un pour le modèle UserProfile. 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 de sauvegarder 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)) 

En register.html:

<form method="POST" action=""> 
    {% csrf_token %} 
    {{userform}} 
    {{userprofileform}} 
    <input type="submit"> 
</form> 
+0

J'ai effectué mon code. Je pense que je me rapproche. Merci! – JPC

22

Je regardais dans cela, et a découvert que Django a une forme de création d'utilisateur très simple nouvelle intégré, que vous pouvez utiliser si vous voulez simple inscription - il n'y a pas d'option pour, par exemple, enregistrer une adresse e-mail et la valider, donc cela ne fonctionnera pas pour le cas d'utilisation du PO, mais je l'affiche ici au cas où d'autres rencontreraient cette question comme moi simple.

Si vous voulez juste que les gens soient en mesure de choisir un nom d'utilisateur et mot de passe, puis les built-ins feront tout pour vous, y compris la validation et l'enregistrement du nouvel 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 
) 

La seule chose que vous devez vous faire est de créer register.html ...

Plus d'infos ici: http://www.obeythetestinggoat.com/using-the-built-in-views-and-forms-for-new-user-registration-in-django.html

+0

Toutes les ressources sur la façon de créer le register.html? – Tunisia

+0

@Tunisia jsut crée un template et restitue le 'form', comme pour l'exemple de formulaire de connexion dans les docs. –

Questions connexes