Django no almacena el campo de contraseña en el modelo de usuario
Creé una página de registro utilizando los formularios de registro integrados de Django. Aquí está mi código debajo de
forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class SignUpForm(UserCreationForm):
email = forms.EmailField(max_length=254, help_text='Please provide a valid email address.')
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
def clean(self):
cleaned_data = super(SignUpForm, self).clean()
username = cleaned_data.get("username")
email = cleaned_data.get("email")
check_email = User.objects.filter(email=email)
if check_email:
raise forms.ValidationError(
"You are already registered!")
return cleaned_data
check_username = User.objects.filter(username=username)
if check_username:
raise forms.ValidationError(
"A user with that username already exists")
return cleaned_data
En mi views.py así es como hago la autenticación para el registro
views.py
@csrf_exempt
def signup_users(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=raw_password)
print("signup authencticate", user)
login(request, user)
return redirect('/')
else:
form = SignUpForm()
return render(request, 'signup.html', {'form': form})
Aquí está mi código para manejar el inicio de sesión del usuario
@csrf_exempt
def login_view(request):
print(request.user.is_authenticated())
if request.POST:
email = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(email=email, password=password)
if user is not None:
if user.is_active:
login(request, user)
return HttpResponseRedirect('/')
else:
return render(request, "login.html")
else:
return render(request, "login.html")
Cuando me registro, todo parece estar bien, pero cuando intento iniciar sesión, simplemente no me deja iniciar sesión.
Así que cuando revisé eldjango admin
, esto es lo que encontré
Username: tech1
Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.
Password:
Invalid password format or unknown hashing algorithm.
Raw passwords are not stored, so there is no way to see this user's password, but you can change the password using this form.
No entiendo por qué la contraseña del usuario no se almacena en el momento del registro.
Lo busqué y descubrí esta respuestausing User.objects.get_or_create () da un formato de contraseña no válido en django? que django cifra la contraseña antes de almacenarla y debería usar algo como
user, created = User.objects.get_or_create(username="testuser2")
user.set_password('123')
Pero no estoy muy seguro de dónde poner esto en mi código o cómo ayuda esto. ¿Qué está pasando?