博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
扩展Django内置的auth模块代码示例
阅读量:5302 次
发布时间:2019-06-14

本文共 1848 字,大约阅读时间需要 6 分钟。

一,创建自定义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,所以表就是UserInfoAUTH_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')

 

转载于:https://www.cnblogs.com/2mei/p/9219914.html

你可能感兴趣的文章
Node.js 入门:Express + Mongoose 基础使用
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
使用pager进行分页
查看>>
UVA - 1592 Database
查看>>
Fine Uploader文件上传组件
查看>>
javascript中的传递参数
查看>>
objective-c overview(二)
查看>>
python查询mangodb
查看>>
consonant combination
查看>>
驱动的本质
查看>>
Swift的高级分享 - Swift中的逻辑控制器
查看>>
Swagger简单介绍
查看>>
Python数据分析入门案例
查看>>
vue-devtools 获取到 vuex store 和 Vue 实例的?
查看>>
Linux 中【./】和【/】和【.】之间有什么区别?
查看>>
内存地址对齐
查看>>
看门狗 (监控芯片)
查看>>
css背景样式
查看>>
JavaScript介绍
查看>>
开源网络漏洞扫描软件
查看>>