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

原文地址:https://www.cnblogs.com/2mei/p/9219914.html

时间: 2024-08-07 23:35:47

扩展Django内置的auth模块代码示例的相关文章

Django内置的分页模块

自定义分页 未封装版: 优点:直观 缺点:代码乱,不易维护,可拓展性差 data = [] for i in range(1, 302): tmp = {"id": i, "name": "alex-{}".format(i)} data.append(tmp) print(data) def user_list(request): # user_list = data[0:10] # user_list = data[10:20] try: c

Django内置过滤器详解附代码附效果图--附全部内置过滤器帮助文档

前言 基本环境 Django版本:1.11.8 Python版本:3.6 OS: win10 x64 本文摘要 提供了常用的Django内置过滤器的详细介绍,包括过滤器的功能.语法.代码和效果示例. 本文完整项目文件代码下载地址:完整示例 Django完整内置过滤器帮助文档:Django内置过滤器完整版 参考文献:Django 中文文档 1.8 内置过滤器 注意:所有带参数的过滤器,在使用时,冒号:和参数中间不能有空格. add加 功能: 把add后的参数num加给value: 数字相加会进行算

django 之csrf、auth模块及settings源码、插拔式设计

目录 基于django中间件拷贝思想 跨站请求伪造简介 跨站请求伪造解决思路 方式1:form表单发post请求解决方法 方式2:ajax发post请求解决方法 csrf相关的两个装饰器 csrf装饰器在CBV上的特例 django settings源码 auth模块简介 auth创建用户 auth扩展表 基于django settings配置文件实现插拔式设计 csrf:Cross Site Request Forgery protection 基于django中间件拷贝思想 # start.

Django—内置用户权限管理

内置用户权限管理 对于注册.登录.验证等功能我们可以自己编写用户管理应用,但Django也有一个内置的用户权限管理系统.也是很强大的. 在哪可以看到? 关于用户的信息都存放在这个表中. auth模块 from django.contrib import auth 其中有几个常用的方法: authenticate() 提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username .password两个关键字参数. 如果认证成功(用户名和密码正确有效),便会返回一个 User 实例对象

Django框架进阶6 多对多三种创建方式, Ajax, Content-Type前后端传输数据编码格式, Ajax发送文件数据, django内置的序列化功能, Ajax结合sweetalert实现删除二次确认, 批量插入数据, 自定义分页器, ajax结合sweetalert实现删除二次确认

多对多三种创建方式 1.全自动(较为常用) class Book(models.Model): title = models.CharField(max_length=32) authors = models.ManyToManyField(to='Author') # orm就会自动帮你创建第三张表 class Author(models.Model): name = models.CharField(max_length=32) ''' 好处:第三张表自己创建 不足之处:第三张表无法扩展额外

Django重要组件(Auth模块)

Django重要组件(Auth模块) 一.auth模块介绍 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点.它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据. 二.auth模块常用方法 from django.contrib i

Python内置的urllib模块不支持https协议的解决办法

Django站点使用django_cas接入SSO(单点登录系统),配置完成后登录,抛出“urlopen error unknown url type: https”异常.寻根朔源发现是python内置的urllib模块不支持https协议. >>> import urllib>>> urllib.urlopen('http://www.baidu.com')<addinfourl at 269231456 whose fp = <socket._fileo

Django内置模板标签

Django内置标签总览 可以查询下表来总览Django的内置标签: 标签 说明 autoescape 自动转义开关 block 块引用 comment 注释 csrf_token CSRF令牌 cycle 循环对象的值 debug 调试模式 extends 继承模版 filter 过滤功能 firstof 输出第一个不为False的参数 for 循环对象 for … empty 带empty说明的循环 if 条件判断 ifequal 如果等于 ifnotequal 如果不等于 ifchange

Django内置Admin

Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttypes django.contrib.messages django.contrib.sessions 模板的context_processors: django.contrib.auth.context_processors.auth django.contrib.messages.context_