personalizados - post django
El nombre, apellido y dirección de correo electrónico se filtran en formularios aleatoriamente (1)
hemos implementado django-allauth en nuestra aplicación web y estamos enfrentando filtraciones aleatorias.
Cuando un nuevo usuario ingresa a la página de registro, a veces el usuario ve el nombre, apellido y dirección de correo electrónico del último usuario registrado previamente rellenado en el formulario de registro . Esto ocurre de manera muy aleatoria, solo algunas veces. Esto también ocurre en el formulario de edición de perfil, que es simplemente una forma simple de django que toma la instancia del usuario de self.request.user en CBV (FormView) de esta manera:
def get_form_kwargs(self):
kwargs = super(ProfileView, self).get_form_kwargs()
kwargs.update({
''instance'': self.request.user
})
return kwargs
Estamos utilizando la configuración básica predeterminada de allauth de las instrucciones de instalación del sitio web. Lo usamos por ahora solo para el registro de correo electrónico y el inicio de sesión.
allauth settings.py (todas las demás configuraciones tenemos el mismo tipo de instrucciones, por ejemplo, aplicaciones instaladas, middlewares, etc.):
# DJANGO-ALLAUTH
ACCOUNT_ADAPTER = ''users.adapter.AccountAdapter''
LOGIN_URL = ''/accounts/login/''
LOGIN_REDIRECT_URL = ''bookings:booking_add''
ACCOUNT_FORMS = {''signup'': ''users.forms.SignupForm'', }
ACCOUNT_AUTHENTICATION_METHOD = ''email''
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = ''none''
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_CONFIRM_EMAIL_ON_GET = True
ACCOUNT_LOGOUT_ON_GET = True
SOCIALACCOUNT_EMAIL_VERIFICATION = ''none''
ACCOUNT_EMAIL_SUBJECT_PREFIX = ""
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True
AUTH_USER_MODEL = ''users.User''
AUTHENTICATION_BACKENDS = (
''django.contrib.auth.backends.ModelBackend'',
''allauth.account.auth_backends.AuthenticationBackend'',
)
como signupView usamos el predeterminado, pero también intentamos agregar never_cache decorator (no fue de ayuda):
class SignupView(AllauthSignupView):
template_name = ''account/signup.html''
signup = never_cache(SignupView.as_view())
SignupForm , anulando uno predeterminado:
class SignupForm(AllauthSignupForm):
""" django-allauth usage defined in settings in ACCOUNT_FORMS"""
title = forms.CharField(label=_(''Title''), widget=forms.Select(choices=choices.USER_TITLE))
first_name = forms.CharField(label=_(''First Name''))
last_name = forms.CharField(label=_(''Last Name''))
email = forms.EmailField(widget=forms.TextInput(attrs={''type'': ''email'',}))
password1 = SetPasswordField(label=_("Password"))
password2 = CustomPasswordField(label=_("Password (again)"))
def __init__(self, *args, **kwargs):
super(SignupForm, self).__init__(*args, **kwargs)
set_form_field_order(self, ["title", "first_name", "last_name", "email", "password1", "password2"])
for field in self.fields:
self.fields[field].widget.attrs[''class''] = ''mdl-textfield__input''
class Meta:
fields = (''title'', ''first_name'', ''last_name'', ''email'', ''password1'', ''password2'')
Utilizamos default allauth LoginForm y LoginView.
Es Django 1.8.7, nginx (1 proceso), gunicornio (4 trabajadores) que se ejecuta a través del supervisor (como 1 proceso).
Hemos encontrado problemas causando esto en otra forma cuando tuvimos algo como esto en Django CBV FormView:
def get_initial(self):
user = self.request.user
if something:
self.initial.update({
''title'': user.title,
''first_name'': user.first_name,
''last_name'': user.last_name,
''email'': user.email,
''phone'': user.phone,
''street'': user.street,
''city'': user.city,
''zip_code'': user.zip_code,
''country'': user.country
})
return self.initial
lo hemos arreglado de la siguiente manera:
def get_initial(self):
user = self.request.user
initial = super(PassengerAddStep1FormView, self).get_initial()
if something:
initial.update({
''title'': user.title,
''first_name'': user.first_name,
''last_name'': user.last_name,
''email'': user.email,
''phone'': user.phone,
''street'': user.street,
''city'': user.city,
''zip_code'': user.zip_code,
''country'': user.country
})
return initial