我正在尝试使用 Django AbstractUser 模型来创建我自己的用户模型, 一切似乎都工作正常,但我的单一登录/注册表单似乎有问题,即注册和登录功能工作正常并注册用户,但他们没有登录。但用户没有保持登录状态,并且在用户进行身份验证所需的视图中,我收到错误消息,表明匿名用户正在访问该视图。 我的帐户模型文件如下:
class MyUserManager(BaseUserManager):
def create_user(self, shenase, password=None, **other_fields):
if not shenase:
raise ValueError("shenase is required...!")
user = self.model(shenase=shenase, **other_fields)
user.set_password(password)
user.save()
return user
def create_superuser(self, shenase, password=None, **other_fields):
other_fields.setdefault('is_staff', True)
other_fields.setdefault('is_superuser', True)
other_fields.setdefault('is_active', True)
if other_fields.get('is_staff') is not True:
raise ValueError('Superuser muse have is_staff=True')
if other_fields.get('is_superuser') is not True:
raise ValueError('Superuser muse have is_superuser=True')
return self.create_user(shenase, password, **other_fields)
def random_string():
return str(random.randint(1000000, 9999999))
class MyUser(AbstractUser):
username = None
shenase = models.CharField(max_length=11, unique=True)
eshterak = models.CharField(max_length=7,default=random_string, null=True, blank=True, unique=True)
created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)
objects = MyUserManager()
USERNAME_FIELD = 'shenase'
REQUIRED_FIELDS = []
backend = 'account.mybackend.ModelBackend'
我的视图文件是:
def register_view(request):
form = forms.RegisterForm
if request.method == "POST":
try:
if "shenase" in request.POST:
shenase = request.POST.get('shenase')
user = MyUser.objects.get(shenase=shenase)
user.save()
request.session['user_shenase'] = user.shenase
return HttpResponseRedirect(reverse('account:welcome'))
except MyUser.DoesNotExist:
form = forms.RegisterForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_active = False
user.save()
request.session['user_shenase'] = user.shenase
return HttpResponseRedirect(reverse('account:welcome'))
return render(request, 'account/register.html', {'form': form})
def welcome(request):
try:
shenase = request.session.get('user_shenase')
user = MyUser.objects.get(shenase = shenase)
user.is_active = True
user.save()
login(request, user)
return render(request, 'account/welcome.html', {'shenase': shenase})
except MyUser.DoesNotExist:
messages.error(request, "Error accorded, try again.")
return HttpResponseRedirect(reverse('account:register_view'))
我应该提到我的用户模型没有密码。如果用户输入已经注册的用户名(在我的例子中为“shenase”),他们就会登录,如果在注册之前尚未输入用户名,然后登录并转发到欢迎页面。
如有任何帮助,我们将不胜感激。
问题出在settings.py中的后端设置
我所要做的就是添加:
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'account.mybackend.ShenaseBackend', #My backend Modelbackend
)