Django自定义身份验证get_user()错误

时间:2020-07-06 21:48:06

标签: django django-models django-views

views.py

def login_form_student(request):
    
    if request.method =='POST':
        roll_no = request.POST.get('username')
        password = request.POST.get('pass')

        user = authenticate(request, uniq_id=roll_no,password=password)

        if user is not None:
            login(request,user)
            return redirect('/userdetails/prof_page/')
        else:
            return redirect('/userdetails/thankyoupage/')


    return render(request,'user_interaction/login_form.html')

自定义后端

from .models import user_detail
from django.contrib.auth.backends import ModelBackend

class user_auth_custom(ModelBackend):
    def authenticate(self,request,uniq_id,password):
        flag = 0
        try:
             user = user_detail.objects.get(roll_no=uniq_id)
             if password == user.password:
                 flag = 1
                 return user
        except flag == 0:
            pass
        return None
    
    def get_user(self,user_id):
        try:
            return user_detail.objects.get(pk=user_id)
        except user_detail.DoesNotExist:
            return None

models.py

class user_detail(models.Model):
    full_name = models.CharField(max_length=264,null=True)
    roll_no = models.CharField(max_length=264,unique=True,primary_key=True)
    management_name = models.CharField(max_length=264)
    contact_no = models.CharField(max_length=10)
    email = models.EmailField(max_length=254)
    department = models.CharField(max_length=264)
    residential_status = models.CharField(max_length=264)
    password = models.CharField(max_length=32,default='fmspsg2020')
    last_login = models.DateTimeField(auto_now=True)

我收到验证错误。 [““ 18pw13”值必须是整数。”] 18pw13实际上是roll_no。

我该怎么办? 我应该为IntegerField模型创建一个新的user_id属性吗?

1 个答案:

答案 0 :(得分:0)

为什么不直接从djangos AbstactBaseUser继承用户模型,因为您可以获得Django用户提供的所有用户功能,所以它变得非常容易。

这里是一个链接: https://docs.djangoproject.com/en/3.0/topics/auth/customizing/#specifying-a-custom-user-model