微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

django2.1,使用mysql自定义登录,MySQL:"字段'id'没有默认值"

如何解决django2.1,使用mysql自定义登录,MySQL:"字段'id'没有默认值"

我尝试使用 MysqL 自定义登录 Django2.1,但出现此错误Field 'id' 没有认值。但我已设置Aliuser 中的 ID 是“auto_increment”和“not null”:

enter image description here

我哪里错了?顺便说一句,sqlite3还可以。太奇怪了。

这是我的models.py:

from __future__ import unicode_literals
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.contrib.auth.models import AbstractUser

@python_2_unicode_compatible
class AliUser(AbstractUser):
    userid = models.CharField(max_length=20,default='')  # user Id
    empid = models.CharField(max_length=100,default='')
    sso_token = models.CharField(max_length=36)  # SSO Token
    token_time = models.DateTimeField(auto_Now=True)

    def __str__(self):
        return self.first_name

这是我的 backends.py:

from django.contrib.auth.backends import RemoteUserBackend
from naxxramas.models import AliUser as User

class AliSSOUserBackend(RemoteUserBackend):
    def authenticate(self,request,userId,empId,first_name='',last_name='',email=''):
        if not userId or not empId:  # not my company user
            return None

        user = None

        try:
            user = User.objects.get(empid=empId)
            self.create_unkNown_user = False
        except User.DoesNotExist:
            pass

        if self.create_unkNown_user:
            user,created = User.objects.update_or_create(
                empid=empId,defaults={
                    'username': email.split('@',1)[0],'empid': empId,'userid': userId,'first_name': first_name or last_name or '',# first_name may be null
                    'last_name': last_name or '','email': email,})
            if created:
                user = self.configure_user(user)

        return user if self.user_can_authenticate(user) else None

这是我的 views.py,我发现它可能在“auth_login”中出错:

from django.conf import settings
from django.contrib.auth import authenticate,login as auth_login
from django.http import HttpResponseRedirect,HttpResponseBadRequest

def login(request):
    sso_token = request.GET.get('SSO_TOKEN')
    next = request.GET.get('BACK_URL')

    result = get_user_info_from_sso(sso_token)   # this is a method to get my staff login information
    if not result['hasError']:
        user = json.loads(result['content'])
        user_dict = normalize_user(user)
    else:
        return HttpResponseBadRequest('auth Failed!')

    userId = user_dict.get('id')
    empId = user_dict.get('empId')
    email = user_dict.get('email')
    name = user_dict.get('name')
    realname = user_dict.get('realname')

    if userId is not None:
        user = authenticate(request,userId=userId,empId=empId,first_name=name,last_name=realname,email=email)
        auth_login(request,user)

    user.sso_token = user_dict.get('token')  # update user's token
    user.save()

    response = HttpResponseRedirect(next)
    return response

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。