эй, извини, я был очень занят. Да, это так. Спасибо!
дал страницу регистрации, используя встроенные формы регистрации Django. Вот мой код ниже
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
В моем views.py это, как я делаю аутентификацию для регистрации
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})
Вот мой код для обработки входа пользователя
@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")
Когда я регистрируюсь, все выглядит нормально, но когда я пытаюсь войти в систему, он просто не позволяет мне войти
Поэтому, когда я проверилdjango admin
вот что я нашел
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.
Я не совсем понимаю, почему пароль пользователя не сохраняется во время регистрации?
Я искал это, и я узнал из этого ответаиспользование User.objects.get_or_create () дает неверный формат пароля в django? что django шифрует пароль перед сохранением, и я должен использовать что-то вроде
user, created = User.objects.get_or_create(username="testuser2")
user.set_password('123')
Но я не совсем уверен, где разместить это в моем коде или как это помогает? Что происходит?