Django的admin后台管理系统

img

使用admin管理自定义的用户表,添加用户时怎么对密码进行md5加密后再保存呢?这里默认没有加密。

要对Django的用户密码进行MD5加密,可以使用Django提供的密码哈希工具。在您的Django应用程序中,您需要首先导入密码哈希器,然后重写用户模型的保存方法以使用密码哈希器进行密码哈希。下面是一个示例代码:

python
Copy code

在models.py文件中

import hashlib
from django.contrib.auth.models import AbstractUser
from django.contrib.auth.hashers import make_password

class CustomUser(AbstractUser):
    def save(self, *args, **kwargs):
        if not self.id:
            self.password = make_password(hashlib.md5(self.password.encode('utf-8')).hexdigest())
        super(CustomUser, self).save(*args, **kwargs)


在这个示例中,我们导入了Python的hashlib库以及Django提供的make_password函数。我们使用hashlib库的md5函数来对用户的密码进行MD5哈希,并使用make_password函数将哈希后的密码转换为Django支持的格式。最后,我们调用父类的save方法来保存用户对象。

请注意,由于Django已经提供了安全的密码哈希工具,所以在使用自定义哈希算法之前,请确保您真正需要使用它。此外,对于生产环境,建议使用更强大的哈希算法(如bcrypt),以确保密码安全性。

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7709293
  • 这篇博客也不错, 你可以看下Django后台admin标题、应用名称和数据库表名称的修改
  • 除此之外, 这篇博客: Django基础之Admin后台数据管理中的 5.1 商品列表首页展示 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. 您还可以看一下 才志老师的2小时上手Django框架课程中的 Admin后台管理小节, 巩固相关知识点
    2. 以下回答由chatgpt基于相关博客总结生成:

      答案:

      在Django的admin后台管理系统中对用户密码进行加密保存,需要对默认的User模型进行扩展。具体的步骤如下:

      1. 创建一个新的User模型

      在新的应用中创建models.py文件,在该文件中定义一个新的User模型,并继承Django自带的AbstractBaseUser和PermissionsMixin。

      from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
      
      class MyUser(AbstractBaseUser, PermissionsMixin):
          username = models.CharField(max_length=30, unique=True)
          email = models.EmailField(unique=True)
          is_active = models.BooleanField(default=True)
          is_staff = models.BooleanField(default=False)
          date_joined = models.DateTimeField(auto_now_add=True)
      
          USERNAME_FIELD = 'username'
          REQUIRED_FIELDS = ['email']
      
          def __str__(self):
              return self.username
      
      1. 定义一个新的UserManager

      在新的应用中创建managers.py文件,并定义一个新的UserManager。

      from django.contrib.auth.models import BaseUserManager
      
      class UserManager(BaseUserManager):
          def _create_user(self, username, password, email, **extra_fields):
              if not email:
                  raise ValueError('The Email field must be set')
              email = self.normalize_email(email)
              user = self.model(username=username, email=email, **extra_fields)
              user.set_password(password)
              user.save(using=self._db)
              return user
      
          def create_user(self, username, password=None, email=None, **extra_fields):
              extra_fields.setdefault('is_superuser', False)
              return self._create_user(username, password, email, **extra_fields)
      
          def create_superuser(self, username, password=None, email=None, **extra_fields):
              extra_fields.setdefault('is_superuser', True)
      
              if extra_fields.get('is_superuser') is not True:
                  raise ValueError('Superuser must have is_superuser=True')
      
              return self._create_user(username, password, email, **extra_fields)
      
      1. 在新的User模型中添加objects属性

      在新的User模型中添加objects = UserManager(),以便使用新的UserManager创建用户。

      class MyUser(AbstractBaseUser, PermissionsMixin):
          ...
          objects = UserManager()
      
      1. 将新的User模型注册到admin后台管理系统中

      在新的应用中创建admin.py文件,并导入MyUser和UserAdmin,将MyUser注册到admin后台管理系统中。

      from django.contrib.auth.admin import UserAdmin
      from .models import MyUser
      
      admin.site.register(MyUser, UserAdmin)
      

      这样就可以在admin后台管理系统中使用MyUser模型了,并对用户密码进行加密保存。

      注:在上述代码中,使用了Django自带的set_password方法对密码进行加密保存。如果需要使用md5加密,可以在UserManager中重写_password方法即可。具体代码如下:

      import hashlib
      from django.contrib.auth.models import BaseUserManager
      
      class UserManager(BaseUserManager):
          def _create_user(self, username, password, email, **extra_fields):
              if not email:
                  raise ValueError('The Email field must be set')
              email = self.normalize_email(email)
              user = self.model(username=username, email=email, **extra_fields)
              user.password = self._password(md5, password)  # 密码加密
              user.save(using=self._db)
              return user
      
          def _password(self, method, password):
              return getattr(hashlib, method)(password).hexdigest()
      
          def create_user(self, username, password=None, email=None, **extra_fields):
              extra_fields.setdefault('is_superuser', False)
              return self._create_user(username, password, email, **extra_fields)
      
          def create_superuser(self, username, password=None, email=None, **extra_fields):
              extra_fields.setdefault('is_superuser', True)
      
              if extra_fields.get('is_superuser') is not True:
                  raise ValueError('Superuser must have is_superuser=True')
      
              return self._create_user(username, password, email, **extra_fields)