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

Django AttributeError:“user”对象没有属性“”set_password“”,但未重写user

Django AttributeError:“user”对象没有属性“set_password”,但未重写user

这个错误通常发生在Django用户认证系统中,当我们尝试使用set_password方法来设置用户密码时,但是用户对象并没有这个属性。这个错误的原因可能是我们没有正确地继承或扩展Django的内置用户模型。

在Django中,我们可以使用内置的用户认证系统来处理用户的身份验证和授权。默认情况下,Django提供了一个名为User的用户模型,它包含了一些常用的属性和方法,如用户名、密码等。然而,有时我们需要在用户模型中添加一些额外的字段或方法,这时就需要自定义用户模型。

解决这个错误的方法是通过继承AbstractBaseUser和PermissionsMixin类来创建自定义用户模型,并在其中添加set_password方法。下面是一个示例:

代码语言:python
代码运行次数:0
复制
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.db import models

class CustomUserManager(BaseUserManager):
    def create_user(self, email, password=None, **extra_fields):
        if not email:
            raise ValueError('The Email field must be set')
        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        return self.create_user(email, password, **extra_fields)

class CustomUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True)
    # 添加其他自定义字段

    objects = CustomUserManager()

    USERNAME_FIELD = 'email'
    # 添加其他必需的字段

    def set_password(self, raw_password):
        # 自定义的密码设置逻辑
        # ...

    def get_full_name(self):
        # 返回用户的全名
        # ...

    def get_short_name(self):
        # 返回用户的简短名字
        # ...

    # 添加其他自定义方法和属性

在上面的示例中,我们创建了一个CustomUser模型,继承了AbstractBaseUser和PermissionsMixin类,并添加了自定义的字段和方法。CustomUserManager类用于管理CustomUser模型的创建和保存。

通过使用自定义用户模型,我们可以在Django中使用set_password方法来设置用户密码,而不会再出现AttributeError的错误。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云数据库MySQL。

腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm

腾讯云数据库MySQL:https://cloud.tencent.com/product/cdb_mysql

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django 用户认证(Auth)组件

) set_password(password) User对象属性 3 扩展默认的auth_userDjango 用户认证(Auth)组件 Auth模块 1 Auth模块是什么 Auth模块是Django...如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。 authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。...对象,以及一个经过认证的User对象。...若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。...对象属性 User对象属性:username, password is_staff : 用户是否拥有网站的管理权限. is_active : 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录

91530

15.Django基础十一之认证系统

authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。     ...设置Proxy模型: 作用: 给模型增加操作方法 局限: 不能增加或减少User模型的字段 好处: 不破坏原来的User模型的表结构 如果你对Django提供的字段,以及验证的方法都比较满意,没有什么需要改的...示例代码如下: # models.py from django.contrib.auth.base_user import BaseUserManager # 重写UserManager class...二 User对象   User 对象属性:username, password(必填项)password用哈希算法保存到数据库 user对象的 is_authenticated()     如果是真正的...() 用户对象属性     user_obj能够拿到认证所用用户表的数据属性,比如username, password等。

2.2K20
  • Auth模块

    如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。 authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。...对象,以及一个经过认证的User对象。...若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。...用法: user.set_password(password='') user.save() @login_required def set_password(request): user =...对象属性 User对象属性:username, password is_staff : 用户是否拥有网站的管理权限. is_active : 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录

    95820

    Django之auth模块(用户认证)

    auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象, 而有了auth模块之后就可以很轻松的去验证用户的登录信息是否存在于数据库中...authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是需要的。...HttpRequest对象,以及一个认证了的User对象 此函数使用django的session框架给某个已认证的用户附加上session id等信息。...to a success page. 4 、user对象的 is_authenticated() 要求: 1  用户登陆后才能访问某些页面, 2  如果用户没有登录就访问该页面的话直接跳到登录页面 3...user对象 User 对象属性:username, password(必填项)password用哈希算法保存到数据库 is_staff : 用户是否拥有网站的管理权限. is_active : 是否允许用户登录

    1.6K50

    Django Rest Framework

    通用视图可以设置一些类属性在通用视图内,也可以根据特殊要写重写它的内部视图方法 使用.as_views()来转换成视图函数 url(r’^/users/’, ListCreateAPIView.as_view...1)属性 基本属性: queryset: 用于返回query对象集合,也可以使用get_queryset()方法。...通常情况下,你必须设置这个属性,或重写get_serializer_class()方法。...lookup_field: 模型的字段应该用于执行对象查找个别的模型实例 lookup_url_kwarg:URL应该用于对象查找关键字参数 分页属性: pagination_class: 用于返回一个分页列表视图的分页类...保存与删除挂钩方法: 以下方法是mixins类提供,提供简单的对象保存和删除的行为重写: perform_create(self, serializer): CreateModelMixin 保存对象时候会被调用

    2.3K60

    Django auth组件

    二.用户对象 用户对象Django认证系统的核心,需要导入auth模块,该模块存在于django.contrib下 from django.contrib import auth Django的认证框架只有一个用户模型...() 2.用户认证 提供的用户认证功能就是验证用户名以及密码是否正确,如果认证成功,便返回一个User对象,authenticate()会在该User对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的...=name,pwd=pwd).first() 3.用户登录 该函数接收一个HttpRequest对象和一个User对象参数,该方法会把用户的ID保存在Django的session中,一旦登录成功,函数中的...request对象中,就会有一个user对象,就是当前登录的用户对象,如果没有登录,request.user=AnonymousUser,匿名用户 from django.contrib.auth import...bool = request.user.check_password('密码) 9.修改密码 auth提供了一个修改密码的方法set_password,接收要设置新密码作为参数,设置完一定要调用用户对象

    92740

    django-Auth模块(详细介绍)

    如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。 authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。...对象,以及一个经过认证的User对象。...若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。...用法: ok = user.check_password('密码') set_password(password) auth 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。...用法: user.set_password(password='') user.save() User对象属性 User对象属性:username, password is_staff : 用户是否拥有网站的管理权限

    1.2K20

    Django实战-信息资讯-重构 USER 模型

    一、指定自定义的用户模型 ① Django 自定义的 User model 满足一些最低要求: 模型必须有一个唯一的字段可被用于识别目的。可以是一个用户名、电子邮件或任何其它独特属性。...用来告诉用户已被认证 set_password(raw_password) 设置密码。按照给定的原始字符串设置用户的密码。不保存 AbstractBaseUser 对象。...set_unusable_password() 设置user无密码。 不同于密码为空,如果使用 check_password(),则不会返回True。不保存AbstractBaseUser 对象。...Django 允许通过修改 settings.py 文件中的 AUTH_USER_MODEL 设置覆盖默认的 User 模型,其值引用一个自定义的模型。...# AUTH_USER_MODEL 这个属性django 内置的,会主动到这个文件中查找这个属性, # 如果找到了,那么就会使用这个属性指定的模型来作为 User 对象 # AUTH_USER_MODEL

    93220

    Django之用户认证组件

    用户认证组件用的是Django自带一个表:auth_user   一、auth模块   1,authenticate()判断用户是否存在方法 user=authenticate(username='...二、user对象   只要登录过的用户,访问任何视图的时候都可以使用request.user对象,这就是一个user对象,request.user.name就可以拿到用户的名字,request.user.email...除此之外,user对象还拥有以下方法:   1,user对象的is_authenticated()   如果session表里有你的登录记录,那返回值为True,可以用来验证用户是否登录过。   ...:   2,在auth_user表中添加记录,相当于添加一个用户 from django.contrib.auth.models import User User.objects.create_user...(password)   用户需要修改密码之前,首先得让他输入原来的密码,如果输入正确返回True,否则返回None,当返回True时,才允许修改密码   4,set_password()修改密码 user

    59430

    Django基础篇-auth系统

    User 用户 在 views.py 文件中 创建用户 验证用户 登录 注销 login_required 装饰器 如果没有登录成功,会跳转到 settings.LOGIN_URL 指定的 URL...②User 模型常用属性和方法 username:用户名; email:邮箱; groups:多对多的组; user_permissions:多对多的用户权限; is_staff:是否是 admin 的管理员...is_superuser:是否是超级用户; last_login:上次登录时间; date_joined:注册时间; is_authenticated:是否验证通过了; is_anonymous:是否是匿名用户; set_password...([permission_list]) myuser.user_permissions.add(permission, permission, ...) myuser.user_permissions.remove...:appname + . + 权限名称 ④Group 模型 所属包 django.contrib.auth.models.Group 创建 Group:必须传一个 name 参数进去 Group 操作

    55720

    【愚公系列】2022年04月 Python教学课程 71-DRF框架之内置路由

    如果未设置,则将根据视图集的属性(如果有)自动生成基名。请注意,如果视图集不包含属性,则必须在注册视图集时进行设置。...上面的示例将生成以下 URL 模式: 网址模式: 名称:^users/$‘user-list’ 网址模式: 名称:^users/{pk}/$‘user-detail’ 网址模式: 名称:^accounts...将生成以下路由: 网址模式:^users/{pk}/set_password/$ 网址名称:'user-set-password' 默认情况下,URL 模式基于方法名称,URL 名称是方法名称和带连字符的方法名称的组合...例如: router = SimpleRouter(trailing_slash=False) 尾随斜杠在 Django 中是约定俗成的,但在其他一些框架(如 Rails)中默认不使用。...对于限制性更强(或宽松)的查找模式,请在视图集上设置属性

    93820

    Django之auth组件

    first()   如果校验通过,会返回一个user 对象,通过判断user对象,校验是否验证成功   3、登录: auth.login(request,user);其实就是在session中写了一条数据...  4、一旦登录成功 ,调了 这个函数 login(request,user),以后 在视图类,函数中的request对象中,就有一个user对象,就是当前登录的用户对象,如果没有登录,request.user...后面的key值, -login_url:如果没有登录,跳转到的页面 -可以局部配置 -可以全局配置(在setting中) # 全局的配置,如果没有登录,跳到这个路由 LOGIN_URL='/login.../'   7、创建用户: from django.contrib.auth.models import User     创建 超级用户和普通 用户,不能用create 即:user=User.objects.create...-logout -set_password ....

    66620

    Django-中间件-csrf扩展请求伪造拦截中间件-Django Auth模块使用-效仿 django 中间件配置实现功能插拔式效果-09

    render 属性时会触发,或者是表明一个对象时 TemplateResponse 对象或等价方法 的时候也会触发(从下往上依次执行) def index(request): print(...csrf_exempt 是特例,其他的装饰器在给CBV 装饰的时候 都可以有三种方式 Auth 模块 科普提示小点: 一个方法的放回结果打印出来是 “字符串” 最好 type 确认一下,可能是对象重写了...request.user 拿到当前登录的用户对象(未登录会报错,AnonymousUser 匿名用户) # 获取用户对象 request.user # 用户登录了直接获取用户对象,用户没登录获取到...如果没有登录 默认跳转到 一个莫名其妙的登陆页面 def set_password(request): if request.method == 'POST': old_password...从文件中获取属性或者方法 cls = 一个个的类名 obj = cls() # 类实例化生成对象 obj.send(content) # 对象调方法 settings.py

    1.4K50

    django 关于User模型

    所以如果想要修改密码,不能直接修改password字段,而需要通过调用set_password来达到修改密码的目的。...='111111') # 如果验证通过了,那么就会返回一个user对象。...if user is not None: # 执行验证通过后的代码 else: # 执行验证没有通过的代码。 扩展用户模型: Django内置的User模型虽然已经足够强大了。...设置Proxy模型: 如果你对Django提供的字段,以及验证的方法都比较满意,没有什么需要改的。但是只是需要在他原有的基础之上增加一些操作的方法。那么建议使用这种方式。...但是因为我们重写User,所以应该尽可能的模拟User模型: USERNAME_FIELD:用来描述User模型名字字段的字符串,作为唯一的标识。

    1.1K30
    领券