Я новичок в Джанго. Я хочу, чтобы этот пользователь мог войти, используя имя пользователя или электронную почту. Я использую пользовательскую модель пользователя. страница регистрации работает нормально, но при входе в систему при отправке данных я получаю ошибки.
мой код не работает. я не знаю, как заставить это работать должным образом. пожалуйста, если кто-то может помочь в работе должным образом. Спасибо
// views.py
from django.shortcuts import render
from .forms import UserCreationForm,UserLoginForm
from django.http import HttpResponseRedirect
from django.contrib.auth import login,get_user_model, logout,authenticate
# Create your views here.
def base(request):
return render(request, 'articles/base.html')
def login(request,*args,**kwargs):
form=UserLoginForm(request.POST or None)
if form.is_valid():
user_obj=form.cleaned_data.get('user_obj')
print(user_obj)
username = user_obj['query']
password = user_obj['password']
user = authenticate(username=username, password=password)
if user is not None:
print("in login")
login(request, user)
return HttpResponseRedirect('/')
else:
return render(request, 'login1.html', {'form': form})
return render(request, 'articles/login1.html',{'form':form})
// forms.py
from django import forms
from django.contrib.auth import get_user_model
from django.db.models import Q
from django.contrib.auth import get_user_model
User=get_user_model()
class UserCreationForm(forms.ModelForm):
password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)
class Meta:
model=User
fields=['username','email']
def clean_password(self):
# Check that the two password entries match
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise forms.ValidationError("Passwords don't match")
return password2
def save(self, commit=True):
# Save the provided password in hashed format
user = super(UserCreationForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user
class UserLoginForm(forms.Form):
query=forms.CharField(label='Username/Email')
password=forms.CharField(label='Password',widget=forms.PasswordInput)
def clean(self,*args,**kwargs):
query=self.cleaned_data.get('query')
password=self.cleaned_data.get('password')
user_qs_final=User.objects.filter(
Q(username__iexact=query)|
Q(email__iexact=query)
).distinct()
if not user_qs_final.exists() and user_qs_final!=1:
raise forms.ValidationError("Invalid credentials-user does not exits")
user_obj=user_qs_final.first()
if not user_obj.check_password(password):
raise forms.ValidationError("credential are wrong")
self.cleaned_data["user_obj"]=user_obj
return super(UserLoginForm,self).clean(*args,**kwargs)
В настоящее время я получаю эту ошибку
TypeError: 'User' object is not subscriptable