使用Django和Python插入数据库时出错

使用Django和Python插入数据库时出错,python,django,Python,Django,我是使用Django和Python将数据保存到DB中的一个错误。错误如下所示 错误: 我在下面解释我的模型文件 class User(models.Model): """docstring for User""" uname = models.CharField(max_length=200) password = models.CharField(max_length=200) date = models.DateTimeField(default=datet

我是使用Django和Python将数据保存到DB中的一个错误。错误如下所示

错误:

我在下面解释我的模型文件

class User(models.Model):
    """docstring for User"""

    uname = models.CharField(max_length=200)
    password = models.CharField(max_length=200)
    date = models.DateTimeField(default=datetime.now, blank=True)
    raw_password = models.CharField(max_length=200,blank=True, null=True)
以下是要保存到数据库中的数据

if request.method == 'POST':
        name = request.POST.get('uname')
        password = request.POST.get('pass')
        sec_pass = password
        con_password = request.POST.get('conpass')
        length = 16 - (len(password) % 16)
        password += chr(length)*length
        obj = AES.new('this is a carkey', AES.MODE_CBC, 'This is an IV456')
        enpass = obj.encrypt(password)
        if sec_pass == con_password:
            passw = User(
                uname=name,
                password=enpass,
                raw_password=password,
            )
            passw.save()
    return render(request, 'bookingservice/login.html', {})
在这里,当我加密数据并试图保存到数据库时,出现了上述错误。请帮助我解决此错误。

可能会对您有所帮助

或者,您可以使用
base64
对编码后的密码进行字符串编码:

import base64
# your code before if statement is here
b64enpass = base64.b64encode(enpass)
if sec_pass == con_password:
    passw = User(
        uname=name,
        password=b64enpass,
        raw_password=password,
    )
    passw.save()

当然,在这种情况下,您必须在从db接收
User
对象后解码密码。

为什么要这样做?Django已经有了一个非常好的安全认证系统。你为什么要搞加密?我有一个这样的要求。你能解决这个错误吗?我猜
enpass
是字节,而不是字符串。你可能需要解码它?@Grimmy:你能写出你的解决方案吗?base64肯定是答案,正如回答中提到的@EduardStepanov<代码>加密返回二进制数据,无法解码为字符串。its再次给出此错误
异常值:数据库已锁定
import base64
# your code before if statement is here
b64enpass = base64.b64encode(enpass)
if sec_pass == con_password:
    passw = User(
        uname=name,
        password=b64enpass,
        raw_password=password,
    )
    passw.save()