validacion usuarios sesiones manejo make gestion form example auth django django-registration

usuarios - Django-Registro: correo electrónico como nombre de usuario



path login django (3)

Estimado compañero Django Coder,

Creo que esta es la mejor manera de hacerlo. ¡Buena suerte!

El primer paso es crear la forma que te gustaría usar .

project / accounts / forms.py

from django import forms from registration.forms import RegistrationForm from django.contrib.auth.models import User class Email(forms.EmailField): def clean(self, value): super(Email, self).clean(value) try: User.objects.get(email=value) raise forms.ValidationError("This email is already registered. Use the ''forgot password'' link on the login page") except User.DoesNotExist: return value class UserRegistrationForm(forms.Form): password1 = forms.CharField(widget=forms.PasswordInput(), label="Password") password2 = forms.CharField(widget=forms.PasswordInput(), label="Repeat your password") #email will be become username email = Email() def clean_password(self): if self.data[''password1''] != self.data[''password2'']: raise forms.ValidationError(''Passwords are not the same'') return self.data[''password1'']

Aquí está creando un archivo para anular la función register () en django-registration.

project / accounts / regbackend.py

from django.conf import settings from django.contrib.sites.models import RequestSite from django.contrib.sites.models import Site from registration import signals from registration.forms import RegistrationForm from registration.models import RegistrationProfile from registration.backends import default class Backend(default.DefaultBackend): def register(self, request, **kwargs): email, password = kwargs[''email''], kwargs[''password1''] username = email if Site._meta.installed: site = Site.objects.get_current() else: site = RequestSite(request) new_user = RegistrationProfile.objects.create_inactive_user(username, email, password, site) signals.user_registered.send(sender=self.__class__, user=new_user, request=request) return new_user

Dirige tus URL a las rutas que quieras usar.

proyecto / urls.py

(r''^accounts/'', include(''registration.backends.default.urls'')),

Indique a sus URL que utilicen el servidor personalizado para la vista de registro. Además, importe el formulario que creó y agréguelo a la url para que la vista lo procese.

proyecto / cuentas / urls.py

from django.conf.urls.defaults import * from registration.backends.default.urls import * from accounts.forms import UserRegistrationForm urlpatterns += patterns('''', #customize user registration form url(r''^register/$'', ''registration.views.register'', { ''backend'': ''accounts.regbackend.Backend'', ''form_class'' : UserRegistrationForm }, name=''registration_register'' ), )

Espero que eso funcione!

-Mate

¿Cómo uso los correos electrónicos en lugar del nombre de usuario para la autenticación usando django-registration ?

Además, ¿cómo hago cumplir este cambio una vez que ya he instalado el módulo de registro?

¿Edito la solución aquí? ¿ Alguien sabe un buen truco para hacer que django-registration use los correos electrónicos como nombres de usuario? en la carpeta lib?


La forma más sencilla sería ocultar el campo de nombre de usuario en la plantilla registration_form con CSS display: none property. Y añada una secuencia de comandos que toma el valor del campo de formulario de correo electrónico y establece el valor en el campo de nombre de usuario oculto. Por lo tanto, al enviar el formulario, el usuario envía el correo electrónico como nombre de usuario sin saberlo. El único problema es que un campo de nombre de usuario, de forma predeterminada, no puede aceptar un correo electrónico de más de 30 caracteres. Por lo tanto, para una apuesta segura, debe aumentar la longitud del nombre de usuario manualmente en su base de datos.

Aquí está la nueva plantilla registration_form.html:

<form method="post" action="" class="wide"> {% csrf_token %} <dl> <div style="display:none"> <dt> <label for="id_username">Username:</label> {% if form.username.errors %} <span class="error">{{ form.username.errors.as_text }}</span> {% endif %} </dt> <dd>{{ form.username }}</dd> </div> <dt> <label for="id_email">Email address:</label> {% if form.email.errors %} <span class="error">{{ form.email.errors.as_text }}</span> {% endif %} </dt> <dd>{{ form.email }}</dd> <br> <dt> <label for="id_password1">Password:</label> {% if form.password1.errors %} <span class="error">{{ form.password1.errors.as_text }}</span> {% endif %} </dt> <dd>{{ form.password1 }}</dd> <br> <dt> <label for="id_password2">Password (type again to catch typos):</label> {% if form.password2.errors %} <span class="error">{{ form.password2.errors.as_text }}</span> {% endif %} </dt> <dd>{{ form.password2 }}</dd> <br> <dt><input type="submit" value="Sign up" /></dt> </dl> </form>

El srcipt jQuery simple que establece el valor en el nombre de usuario del campo de formulario oculto es:

$(document).ready(function() { $(''#id_email'').blur(function(e) { var email_address = $(''#id_email'').val(); $(''#id_username'').val(email_address); }); });

Los ids id_email y id_username se establecen automáticamente mediante el formulario django-registration.


Para Django> = 1.3 y <1.5, hay un correo electrónico de Django como nombre de usuario en github.

Recientemente estoy usando el registro y cambio fácilmente a django-registration-email . Funciona bien en Django 1.4, reutilizando las mismas plantillas y simplemente agregando REGISTRATION_EMAIL_ACTIVATE_SUCCESS_URL = "/profiles/create/" para redirigir a la página de creación de profile .

Django 1.5 soluciona este problema a través del modelo de Usuario personalizado, donde puede especificar qué campo se utiliza como nombre de usuario . Como se indica en la documentación de Django 1.5:

Una cadena que describe el nombre del campo en el modelo de usuario que se utiliza como el identificador único. Por lo general, este será un nombre de usuario de algún tipo, pero también puede ser una dirección de correo electrónico o cualquier otro identificador único.