• 扩展Django内置的auth模块代码示例


    一,创建自定义User模型类。继承AbstractUser 

    方法1

      新建一个表,表里面有手机号,邮箱,地址,一对一与User表进行关联

    方法2

      新定义一个类,继承类AbstractUser ( auth模块的User类也是继承此AbstractUser 类的)

      说明:python 语法上,也是可以直接继承User类的

      以下代码,我们扩展了两个字段,phone和addr

    注意:settings.py中一定要指不使用内置的User表,而是使用新的UserInfo表

    AUTH_USER_MODEL='app类名.类名'

    models.py中:
    from
    django.contrib.auth.models import AbstractUser # 使用类的的继承来扩展auth模块的AbstractUser类 class UserInfo(AbstractUser): phone = models.CharField(max_length=11) addr = models.CharField(max_length=128)
    settins.py文件中
    #
    如果使用继承 的方式,使用auth模块,则要在settings.y里面配置,默认用户认证时使用的是哪个类对应的数据库表 # 这里我们亲定义的类是UserInfo,所以表就是UserInfo AUTH_USER_MODEL='myApp.UserInfo'

    注意:

    改变 AUTH_USER_MODEL 对你的数据库结构有很大的影响。它改变了一些会使用到的表格,并且会影响到一些外键和多对多关系的构造。

    如果你打算设置AUTH_USER_MODEL, 你应该在创建任何迁移或者第一次运行 manage.py migrate 前设置它。

    在你有表格被创建后更改此设置是不被makemigrations支持的,并且会导致你需要手动修改数据库结构,从旧用户表中导出数据,可能重新应用一些迁移。

    就是说:

      执行 python manage.py makemigrations 之前,要把所有的迁移文件删除掉,再执行makemigrations命令,因这样才能保证不会出错。

      数据库最好也是删除后重新create

    二,使用新表

    views.py中代码:下面以创建用户代码示例,只需导入UserInfo表,然后就可以直接使用UserInfo新表了。

    # 创建用户,即注册
    def register(request):
        # from django.contrib.auth.models import User
        # User.objects.create(username='alex',password='alex1234')  ## 这个不能用,因为数据库里保存的密码是明文的,我们使用username,password登录不了
        # User.objects.create_user(username='alex1',password='alex1234')  # 创建普通用户
        # User.objects.create_superuser(username='alex3',email='',password='alex1234') # 创建超级用户,必须还有email参数
        from myApp.models import UserInfo
        # 创建用户
        user_obj=UserInfo.objects.create_user(username='alex6',password='alex1234')
        # 检查密码(一般用于修改密码前验证)
        ret=user_obj.check_password('alex12345')
        print(ret)  #返回False
        # 修改密码
        user_obj.set_password('alex12345')
        # 修改后保存
        user_obj.save()
        # 修改后再检查
        ret=user_obj.check_password('alex12345')
        print (ret)  # 返回True
        return HttpResponse('o98k')
  • 相关阅读:
    19面向对象--特殊成员
    18面向对象--成员和组合
    17面向对象--三大特性
    16异常处理
    15(os、random、sys、)(json、pickle )
    14python模块之re
    13正则表达式
    12内置函数补充,递归以及二分法。
    Linux环境ftp搭建及问题总结
    运维之路—linux忘记密码修改(rd.breake 方式)
  • 原文地址:https://www.cnblogs.com/2mei/p/9219914.html
Copyright © 2020-2023  润新知