examples - django templates bootstrap
Cómo crear el campo de entrada de contraseña en django (7)
Hola, estoy usando la clase de modelo django con algún campo y un campo de contraseña. En lugar de mostrar texto plano regular, quiero mostrar la entrada de contraseña. Creé una clase de modelo como esta:
class UserForm(ModelForm):
class Meta:
password = forms.CharField(widget=forms.PasswordInput)
model = User
widgets = {
''password'': forms.PasswordInput(),
}
Pero recibo el siguiente error: NameError: name ''forms'' no está definido.
Estoy usando django versión 1.4.0. Seguí este enlace: Problemas con la contraseña de Django
Sigue recibiendo el mismo error. Que debería hacer. ¿Dónde me estoy equivocando? Por favor ayuda
¿Por qué no crear su propio campo de contraseña que puede usar en todos sus modelos?
from django import forms
class PasswordField(forms.CharField):
widget = forms.PasswordInput
class PasswordModelField(models.CharField):
def formfield(self, **kwargs):
defaults = {''form_class'': PasswordField}
defaults.update(kwargs)
return super(PasswordModelField, self).formfield(**defaults)
Entonces, ahora en tu modelo que usas
password = PasswordModelField()
@DrTyrsa es correcto. No olvides tus paréntesis.
from django.forms import CharField, Form, PasswordInput
class UserForm(Form):
password = CharField(widget=PasswordInput())
Dado que esta pregunta se formuló hace un par de años, y está bien indexada en los resultados de búsqueda, esta respuesta podría ayudar a algunas personas que vienen con el mismo problema pero que usan una versión más reciente de Django.
Estoy usando Django 1.11 pero también debería funcionar para Django 2.0.
Teniendo en cuenta que usa un usuario modelo, supondré que está utilizando el modelo predeterminado de usuario () de Django.
Como el modelo User () ya tiene un campo de contraseña, podemos agregarle un widget.
from django import forms
from django.contrib.auth.models import User
# also, it will work with a custom user model if needed.
# from .models import User
class UserRegistrationForm(forms.ModelForm):
class Meta:
model = User
fields = [''username'', ''password'']
widgets = {
# telling Django your password field in the mode is a password input on the template
''password'': forms.PasswordInput()
}
Soy bastante nuevo en Django, si mi respuesta no fue lo suficientemente precisa, háganoslo saber; nos complacería editarlo más adelante.
El widget debe ser una llamada a función, no una propiedad. Usted faltaba el paréntesis.
class UserForm(ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
class Meta:
model = User
Es muy sencillo.
Debería obtener el campo de formulario de password
fuera de la clase Meta
.
Lo hice como un seguimiento sin ninguna importación adicional
from django import forms
class Loginform(forms.Form):
attrs = {
"type": "password"
}
username = forms.EmailField(widget=forms.TextInput(attrs=attrs))
password = forms.CharField(widget=forms.TextInput(attrs=attrs))
La idea proviene del código fuente: https://docs.djangoproject.com/en/2.0/_modules/django/forms/fields/#CharField
Necesita incluir lo siguiente en sus importaciones;
from django import forms