所以问题是我在 django 中扩展了用户模型。我已经为它写了意见。这是我的模型代码:-
class StudentProfile(User):
batch = models.CharField(max_length=10)
course = models.CharField(max_length=20)
date_of_birth = models.DateField()
answer = models.CharField(max_length=20)
contact = models.CharField(max_length=20)
这是我的身份验证后端文件:-
从 quizapp.models 导入 StudentProfile
class StudentAuthenticationBackend(object):
def authenticate(self, username=None, password=None):
try:
student = StudentProfile.objects.get(username=username)
if student.check_password(password):
return student
except StudentProfile.DoesNotExist:
pass
return None
def get_user(self, user_id):
try:
return StudentProfile.objects.get(pk=user_id)
except StudentProfile.DoesNotExist:
return None
我已经在seetings.py 中进行了更改
AUTHENTICATION_BACKENDS = (
'quizapp.backends.StudentAuthenticationBackend',
'django.contrib.auth.backends.ModelBackend',
)
我正在打印用户名、密码和身份验证用户。这就是我得到的:-
使用 django 创建超级用户时
>> a = authenticate(username="super",password="super")
>> print(a)
>> super
但是当使用表单创建的用户时,
>> b = authenticate(username="test",password="123")
>> print(b)
>> None
我已经交叉检查了用户名和密码,这是真的。所以但是在 auth_user 表中,用户名是超级用户,密码是加密的,但是对于测试用户,用户名是用户,密码是 123。
所以问题一定是 django 正在使用 123 是加密密码并使用它的解密版本进行身份验证。
有没有办法解决这个问题?
我使用了 OneToOneField 并在 StudentProfile 模型中添加了额外的字段。现在我正在使用表单并使用它注册用户。
这是查看代码:-
def register_page(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
user = StudentProfile.objects.create(
username=form.cleaned_data['username'],
password=form.cleaned_data['password1'],
batch=form.cleaned_data['batch'],
first_name=form.cleaned_data['first_name'],
last_name=form.cleaned_data['last_name'],
course=form.cleaned_data['course'],
date_of_birth=form.cleaned_data['date_of_birth'],
secret_question=form.cleaned_data['secret_question'],
answer=form.cleaned_data['answer'],
contact=form.cleaned_data['contact']
)
return HttpResponseRedirect('/register/success/')
else:
form = RegistrationForm()
variables = RequestContext(request, {'form': form})
return render_to_response('registration/register.html',variables)
而且我在“user_id”列中的 /register/ null 值处收到 IntegrityError 违反了非空约束错误。有没有什么办法解决这一问题?