首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django密码字段自定义类

是指在Django框架中,可以通过自定义密码字段类来实现对用户密码的定制化处理和管理。通过自定义密码字段类,可以增加额外的功能或者修改默认的密码处理方式,以满足特定的业务需求。

Django提供了一个内置的密码字段类django.contrib.auth.models.PasswordField,用于存储用户密码的哈希值。但是,有时候我们可能需要对密码字段进行一些额外的处理,比如加密算法的选择、密码强度的验证、密码重置等。

自定义密码字段类可以通过继承django.db.models.Field类来实现。以下是一个示例:

代码语言:txt
复制
from django.db import models
from django.contrib.auth.hashers import make_password, check_password

class CustomPasswordField(models.Field):
    def __init__(self, *args, **kwargs):
        kwargs['max_length'] = 128
        super().__init__(*args, **kwargs)

    def get_internal_type(self):
        return 'CharField'

    def from_db_value(self, value, expression, connection):
        if value is None:
            return value
        return value

    def to_python(self, value):
        if isinstance(value, str):
            return value
        return value

    def get_prep_value(self, value):
        if value is None:
            return value
        return make_password(value)

    def check_password(self, raw_password, encoded_password):
        return check_password(raw_password, encoded_password)

在上述示例中,我们自定义了一个CustomPasswordField类,继承自django.db.models.Field。在该类中,我们重写了一些方法来实现密码字段的定制化处理:

  • __init__方法用于初始化字段的属性,这里设置了字段的最大长度为128。
  • get_internal_type方法返回字段的内部类型,这里返回了CharField
  • from_db_value方法用于从数据库中获取字段的值。
  • to_python方法用于将字段的值转换为Python对象。
  • get_prep_value方法用于将字段的值转换为数据库可接受的格式,这里使用了make_password函数对密码进行哈希处理。
  • check_password方法用于验证密码的正确性,这里使用了check_password函数进行密码比对。

通过自定义密码字段类,我们可以根据具体需求来实现密码字段的个性化处理。在Django中,还有许多其他的字段类可以进行自定义,以满足不同的业务需求。

推荐的腾讯云相关产品:腾讯云数据库MySQL、腾讯云云服务器CVM、腾讯云密钥管理系统KMS。

  • 腾讯云数据库MySQL:腾讯云提供的高性能、可扩展的关系型数据库服务,支持自动备份、容灾、监控等功能。详情请参考:腾讯云数据库MySQL
  • 腾讯云云服务器CVM:腾讯云提供的弹性计算服务,可快速创建、部署和管理云服务器。详情请参考:腾讯云云服务器CVM
  • 腾讯云密钥管理系统KMS:腾讯云提供的安全密钥管理服务,可用于保护云上资源的加密密钥。详情请参考:腾讯云密钥管理系统KMS
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django 2.1.7 模型 - 字段类型

本篇章开始将继续看看模型还可以设置哪些字段类型 参考文献 https://docs.djangoproject.com/zh-hans/2.1/ref/models/fields/ 前面篇章设置好的两个模型...models.IntegerField() server = models.ForeignKey('ServerInfo',on_delete=models.CASCADE, default=None) 对于模型字段类型...在官方文档中,关于字段类型的描述非常多,如下: 模型字段的定义属性 django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列...定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下: 属性=models.字段类型(选项) 字段类型 使用时需要引入django.db.models包,字段类型如下: AutoField:...编写模型演示 有了上面关于字段类型的相关说明,下面来丰富一下我这边编写的模型字段属性,如下: class ServerInfo(models.Model): server_hostname

1.7K30

django 序列化自定义字段

serializers.ModelSerializer 序列化返回数据之前对字段进行自定义然后返回数据 # 序列化所有的字段 class V1s(serializers.ModelSerializer...): # 这里是要进行自定义字段,数据库中有个m3u8字段,这里定义字段的时候一定要和数据库的字段名字是一样的 m3u8=serializers.SerializerMethodField()...class Meta: model = models.Movies fields = '__all__' # 自定义字段,用get_字段名字的方式获取到字段...,然后对字段进行处理 def get_m3u8(self, obj): # 这里的obj值得就是字段对象 它是一个queryset a = obj.m3u8 b...# 这里是没有进行自定义字段处理的序列化器,因为有all存在,默认返回数据库中所有字段 class V2s(serializers.ModelSerializer): m3u8=serializers.SerializerMethodField

1.4K30
  • 自定义Django密码策略

    Django 从1.4 版本开始,包含了一些安全方面的重要提升。其中一个是使用 PBKDF2 密码加密算法代替了 SHA1 。另外一个特性是你可以添加自己的密码加密方法。...Django 会使用你提供的第一个密码加密方法(在你的 setting.py 文件里要至少有一个方法) 1 2 3 4 5 6 7 8 PASSWORD_HASHERS = ( 'django.contrib.auth.hashers.PBKDF2PasswordHasher...默认生成的密码策略往往会带上 md5_xxx, pbkdf2_xxx,同其他系统整合的时候,一般是没有这些前缀的,这就需要我们自定义一个密码策略。... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 import hashlib from...settings.py 中: 1 2 3 PASSWORD_HASHERS = ( 'ownmd5.hashers.OwnMD5PasswordHasher', ) 这样,默认的user及auth模块都会采用自定义

    1.6K70

    Django 2.1.7 模型 - 字段类型

    本篇章开始将继续看看模型还可以设置哪些字段类型 参考文献 https://docs.djangoproject.com/zh-hans/2.1/ref/models/fields/ 前面篇章设置好的两个模型...models.IntegerField() server = models.ForeignKey('ServerInfo',on_delete=models.CASCADE, default=None) 对于模型字段类型...在官方文档中,关于字段类型的描述非常多,如下: 模型字段的定义属性 django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列...定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下: 属性=models.字段类型(选项) 字段类型 使用时需要引入django.db.models包,字段类型如下: AutoField...编写模型演示 有了上面关于字段类型的相关说明,下面来丰富一下我这边编写的模型字段属性,如下: class ServerInfo(models.Model): server_hostname

    1.2K10

    django restframework serializer 增加自定义字段操作

    在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段。...方法一修改数据库,利用model 这里就不多解释,主要来说第二种,不修改django的model,直接使用SerializerMethodField(method_name=None)字段。...当不指定其method_name时,默认为get_field_name 如果使用ModelSerializer并指定字段时,要包含此时定义的字段 补充知识:django restframework Serializer...它通过调用它所连接的序列化的方法来获得它的值。它可用于将任何类型的数据添加到对象的序列化表示中。...return instance 以上这篇django restframework serializer 增加自定义字段操作就是小编分享给大家的全部内容了,希望能给大家一个参考。

    3.6K40

    Django 自带密码加密,自定密码加密方式 及自定义验证方式

    这个是我自定义的加密方式,就是基本的md5,而django的MD5PasswordHasher是加盐的。...(_('salt'), ''), (_('hash'), mask_hash(hash)), ]) 之后可以在数据库中看到,密码确实使用了自定义的加密方式...然而仅仅修改这些,在配合django的authenticate验证时无法进行。 经过一些查找,发现需要在自定义authenticate。...首先,引入模块: 代码如下 复制代码 >>> from django.contrib.auth.hashers import make_password, check_password 生成密码:...自带的模块生成一组密码了,这个函数还有一个特点在于每次生成的密码还不一样: 代码如下 复制代码 >>> make_password("www.111cn.net", None, 'pbkdf2_sha256

    4.4K70

    mysql密码字段类型_MySQL 字段类型

    例如,指定一个字段的类型为 INT(6),就可以保证所包含数字少于 6 个的值从数据库中检索出来时能够自动地用空格填充。需要注意的是,使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。...unsigned 和 zerofill UNSIGNED 修饰符规定字段只保存正值,即无符号,而mysql字段默认是有符号的。...ENUM 类型字段可以从集合中取得一个值或使用 null 值,除此之外的输入将会使 MySQL 在这个字段中插入一个空字符串。...,当日热门,生日多少天等等逻辑 不要使用null 为什么这么说呢,因为MYSQL对NULL字段索引优化不佳,增加更多的计算难度,同时在保存与处理NULL形时,也会做更多的工作,所以从效率上来说,不建议用过多的...在数据长度相近时使用char类型比较合适,比如md5加密的密码用户名等。 如果数据经常进行更新修改操作,那么CHAR更好些,因为char长度固定,性能上要快。

    14.5K20

    Django(62)自定义认证「建议收藏」

    前言 如果我们不用使用drf那套认证规则,我们想自定义认证,那么我们首先要知道,drf本身是如何定义认证规则的,也就是要查看它的源码是如何写的 源码分析 源码的入口在APIView.py文件下的dispatch...authenticate_header(self, request): return 'Basic realm="%s"' % self.www_authenticate_realm 自定义认证...# 后台固定在请求对象的META字段中的HTTP_AUTHORIZATION获取 auth = request.META.get('HTTP_AUTHORIZATION...raise AuthenticationFailed("用户数据有误,非法用户") return user, None 然后在settings.py中配置全局的自定义认证...最后我们在请求头中传入正确的认证,auth xx.yy.zz,这次会得到正确的返回结果 { "statusCode": 0, "message": "drf get ok" } 以上的测试,就代表我们自定义的认证起作用了

    60420

    Django基础篇-查询字段

    常用的查询 Field 的常用参数 常用的模型字段类型 ①常用的查询 获取所有记录: rs = User.objects.all() 获取第一条数据: rs = User.objects.first()...相当于是 SQL 语句中的 where 语句后面的条件,语法为“字段名__规则”: exact 相当是等于号: rs = User.objects.filter(name__exact="yuntuan...这个参数只是 Date 和 DateTime 以及 Time 才有的。 DateField.auto_now_add:第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值。...③常用的模型字段类型 IntegerField:整型,映射到数据库中的 int 类型。...映射到数据库中是 date 类型,在使用的时候,可以设置 DateField.auto_now 每次保存对象时,自动设置该字段为当前时间。

    1.7K30

    Django学习笔记之ORM字段字段参数

    它通常把一个和一个表一一对应,的每个实例对应表中的一条记录,的每个属性对应表中的每个字段。  ORM提供了对数据库的映射,不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。...通常,一个模型(model)映射到一个数据库表, 基本情况: 每个模型都是一个Python,它是django.db.models.Model的子类。 模型的每个属性都代表一个数据库字段。...id字段是自动添加的,如果你想要指定自定义主键,只需在其中一个字段中指定 primary_key=True 即可。...char类型字段: class FixedCharField(models.Field): """ 自定义的char类型的字段 """ def __init__(self...,使用字段用于指定关系表 through_fields=None, # 自定义第三张表时,使用字段用于指定关系表中那些字段做多对多关系表

    5.1K10

    Django 2.1.7 Admin - 注册模型、自定义显示列表字段

    Admin站点 内容发布的部分由网站的管理员负责查看、添加、修改、删除数据,开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,Django能够根据定义的模型自动地生成管理模块。...使用Django的管理模块,需要按照如下步骤操作: 1.管理界面本地化 2.创建管理员 3.注册模型 4.自定义管理页面 1.管理界面本地化 本地化是将显示的语言、时间等使用本地的习惯,这里的本地化就是进行中国化...http://127.0.0.1:8000/admin/ 输入前面创建的用户名、密码完成登录。...4.自定义管理页面 在列表页只显示出了ServerInfo object,对象的其它属性并没有列出来,查看非常不方便。Django提供了自定义管理页面的功能,比如列表页要显示哪些值。...打开assetinfo/admin.py文件,自定义,继承自admin.ModelAdmin

    1.1K20

    django自定义非主键自增字段类型详解(auto increment field)

    1.django自定义字段类型,实现非主键字段的自增 # -*- encoding: utf-8 -*- from django.db.models.fields import Field, IntegerField...from django.core import checks, exceptions from django.utils.translation import ugettext_lazy as _...一对一其实就是 一对多 + 唯一索引 # 2.当两个之间有继承关系时,默认会创建一个一对一字段 # 如下会在A表中额外增加一个c_ptr_id列且唯一: class C(models.Model):...,使用字段用于指定关系表 through_fields=None, # 自定义第三张表时,使用字段用于指定关系表中那些字段做多对多关系表 from django.db import models class...自定义非主键自增字段类型详解(auto increment field)就是小编分享给大家的全部内容了,希望能给大家一个参考。

    2.3K10

    Django 2.1.7 Admin管理后台 - 注册模型、自定义显示列表字段

    使用Django的管理模块,需要按照如下步骤操作: 1.管理界面本地化 2.创建管理员 3.注册模型 4.自定义管理页面 1.管理界面本地化 本地化是将显示的语言、时间等使用本地的习惯,这里的本地化就是进行中国化...http://127.0.0.1:8000/admin/ 输入前面创建的用户名、密码完成登录。...在列表页中点击"增加"可以进入增加页,Django会根据模型的不同,生成不同的表单控件,按提示填写表单内容后点击"保存",完成数据创建,创建成功后返回列表页。...4.自定义管理页面 在列表页只显示出了ServerInfo object,对象的其它属性并没有列出来,查看非常不方便。 Django提供了自定义管理页面的功能,比如列表页要显示哪些值。...打开assetinfo/admin.py文件,自定义,继承自admin.ModelAdmin

    2.8K40
    领券