Я создал приложение django с входом, входом в систему и выходом из системы. Я выполнил pyhon manage.py
создает пользователя superuser для создания суперпользователя. Если я захожу с этими учетными данными, он регистрируется, но когда я создаю учетные данные, используя пользовательскую форму входапользователь сохраняется в базе данных, но пользователь не входит в систему с помощью формы входа.
models.py
--------
class MyUserManager(BaseUserManager):
def create_user(self, fname,lname,username, password):
"""
Creates and saves a User with the given username, date of
birth and password.
"""
if not username:
raise ValueError('Users must have an username')
user = self.model(username=username,fname=fname,lname=lname)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, fname,lname,username, password,email=None):
"""
Creates and saves a superuser with the given username and password.
"""
user = self.create_user(
fname=fname,
lname=lname,
username=username,
password=password,
)
user.is_admin = True
user.is_superuser = True
user.save(using=self._db)
return user
class Event(AbstractBaseUser):
fname = models.CharField('fname', max_length=120)
lname = models.CharField('lname',max_length=120)
username = models.CharField('username',max_length = 60,unique=True)
password = models.CharField('password',max_length=120,default='pavi@2789')
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['fname','lname']
objects = MyUserManager()
def __unicode__(self):
return self.username
class Meta:
# managed = False
db_table = "user"
forms.py
-------
#User Registration Form
class UserRegistrationForm(forms.Form):
fname = forms.CharField(required=True,label='FirstName',max_length=32,widget=forms.TextInput(attrs={
'autocomplete':'off'}))
lname = forms.CharField(required=True,label='LastName',max_length=32,widget=forms.TextInput(attrs={
'autocomplete':'off'}))
username = forms.CharField(required = True,label = 'Username',max_length = 32,widget=forms.TextInput(attrs={
'autocomplete':'off'}))
password = forms.CharField(required = True,label = 'Password',max_length = 32,min_length=8,widget=forms.TextInput(attrs={
'autocomplete':'off'}))
class Meta:
model = Event
fields = ('FirstName', 'LastName', 'username', 'password',)
view.py:
------
def signup(request):
if request.method == 'POST':
form = UserRegistrationForm(request.POST)
if form.is_valid():
userObj = form.cleaned_data
username = userObj['username']
password = userObj['password']
fname = userObj['fname']
lname = userObj['lname']
print (username,password,fname,lname)
if(len(password)<8):
# messages.error(request,"This password length should be minimum 8 characters")
raise ValidationError("This password length should be minimum 8 characters ")
if not (User.objects.filter(username=username).exists()):
p = Event(fname=fname, lname=lname, username=username)
p.set_password(password)
p.save()
# return HttpResponseRedirect('Login.html')
return redirect('/Login/')
else:
raise forms.ValidationError('Looks like a username with that username or password already exists')
else:
form = UserRegistrationForm()
return render(request, 'signup.html', {'form':form})
def Login(request):
form = login_form(request.POST or None)
if form.is_valid():
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("password1")
print (username,password)
user = authenticate(username=username, password=password)
print('user is', user)
if user is not None and user.is_active:
print ('entered loop')
login(request,user)
return redirect('/home/')
else:
print ("username and password are incorrect ")
else:
form = login_form()
return render(request, 'Login.html', {'form': form})
Я объявил AUTH_USER_MODEL = 'auth.User'
в settings.py
Я пытался использовать get_user_model() также, но это не работает.