Django 使用admin模块创建模型数据时保存的密码未经过哈希加密

问题遇到的现象和发生背景

我在Django项目中写了一个用户模型,这个模型中包含一个密码字段。在使用Django的admin模块管理这个用户模型时,如果在admin模块中新建一条用户模型中的数据,保存在数据库中的密码是没有经过哈希加密的。

代码

models.py

class TeacherInfo(models.Model):
    school = models.CharField(verbose_name='学校', max_length=16)
    stuffnum = models.IntegerField(verbose_name='工号')
    name = models.CharField(verbose_name='姓名', max_length=16)
    password = models.CharField(verbose_name='密码', max_length=64)
    classnum = models.CharField(verbose_name='班级编号', max_length=64)

admin.py

from django.contrib import admin
from manageApp import models

# Register your models here.

admin.site.register(models.TeacherInfo)

我的解答思路和尝试过的方法

我想找到admin模块是如何保存模型的信息的,然后修改它将数据保存到数据库时的方法。
#希望得到的结果
找到admin模块保存数据的方法的文件位置
使用admin模块创建模型数据时能将密码字段进行哈希加密后保存到数据库中。

因为你不是用的django的用户认证系统的话,你想要密码加密的话可以使用django提供的make_password方法重写模型类的save方法。示例如下:


from django.contrib.auth.hashers import make_password

class User(models.Model):

username = models.CharField(max_length=255,verbose_name='用户名')

password = models.CharField(max_length=255, verbose_name='密码')

def save(self, force_insert=False, force_update=False, using=None,

            update_fields=None):

self.password = make_password(self.password)

super().save(force_insert=False,force_update=False,using=None,update_fields=None)

如果帮助到你,请采纳!