usuarios - La mejor manera de registrar un usuario en Django
registro de usuarios django (2)
Haga dos formularios de modelo, uno para el modelo de User
y otro para el modelo de UserProfile
User
.
class UserForm(django.forms.ModelForm):
class Meta:
model = User
class UserProfileForm(django.forms.ModelForm):
class Meta:
model = UserProfile
exclude = [''user'']
Dales prefijos y muéstrales juntos en el mismo elemento de formulario HTML. En la vista, verifique que ambos sean válidos antes de guardar el usuario y luego el perfil de usuario.
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>
Estoy tratando de implementar el Registro de usuario para mi aplicación Django. El libro que leí menciona UserCreationForm, pero necesito algo más que el nombre, la contraseña y la dirección de correo electrónico. Podría implementar mi propio objeto de usuario y usar ModelForm, creo, pero luego pierdo algunas de las ventajas de django para la autenticación. Finalmente, he leído algo sobre UserProfiles que complementan a los usuarios, supongo, así que creo que necesito una combinación de todas estas cosas. Esto es lo que tengo hasta ahora.
Vista: esto es bastante simple. Todo lo que quiero hacer aquí es crear mi formulario y guardar al usuario
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})
Formulario: este es mi formulario para crear un usuario. O el comienzo de al menos
class RegisterForm1(forms.ModelForm):
class Meta:
model = User
class RegisterForm2(forms.ModelForm):
class Meta:
model = UserProfile
Modelo: este es mi perfil de usuario con el que deseo complementar al usuario.
class UserProfile(models.Model):
user = models.OneToOneField(User)
phonenumber = PhoneNumberField()
¿Está claro lo que intento hacer? Estoy en el camino correcto
Solo estaba investigando esto, y descubrí que Django tiene un formulario de creación de usuario nuevo y muy simple, que puede usar si desea un registro simple: no hay opción para, por ejemplo, guardar una dirección de correo electrónico y validarla, así que no funcionará para el caso de uso del OP, pero lo publico aquí en caso de que otros se encuentren con esta pregunta como lo hice, y estoy buscando algo simple.
Si solo desea que las personas puedan elegir un nombre de usuario y una contraseña, los integradores harán todo por usted , incluida la validación y el guardado del nuevo usuario:
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
)
Entonces, lo único que tienes que hacer tú mismo es crear register.html ...
Más información aquí: http://www.obeythetestinggoat.com/using-the-built-in-views-and-forms-for-new-user-registration-in-django.html