扩展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')

 

posted @ 2018-06-24 11:11  虫儿要吃草  阅读(264)  评论(0编辑  收藏  举报