tipos personalizados formularios fields avanzados django nginx gunicorn django-allauth

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