django 修改默认的user表和默认的认证系统

django的功能非常强大,但是自带的user表很多情况下并不满足我们的需求,因此我们需要修改其默认的user表,并且把用username登录改成用email登录

第一步,创建自己的user表,在创建的app下的models中

from django.contrib.auth.models import AbstractUser
# Create your models here.

class UserProfile(AbstractUser):
    nick_name = models.CharField(max_length=50, verbose_name=‘昵称‘, default=‘‘)
    birthday = models.DateField(null=True, blank=True, verbose_name=‘生日‘)
    gender = models.CharField(max_length=6, choices=((‘male‘, ‘男‘), (‘female‘, ‘女‘)), default=‘female‘, verbose_name=‘性别‘)
    address = models.CharField(max_length=100, default=‘‘, verbose_name=‘地址‘)
    mobile = models.CharField(max_length=11, null=True, blank=True, verbose_name=‘手机号‘)
    image = models.ImageField(max_length=100, upload_to=‘image/%Y/%m‘, default=‘image?default.png‘, verbose_name=‘头像‘)
  class Meta:      verbose_name = ‘用户信息‘      verbose_name_plural = verbose_name
  def __str__(self):      return self.username

因为django的user表也是继承自AbstractUser,所以我们也这样做

然后修改下setting,添加

# UserProfile 覆盖了 django 内置的 user 表
AUTH_USER_MODEL = ‘users.UserProfile‘

appname.userProfile

接着修改认证系统


from django.contrib.auth import authenticate, login, logoutfrom django.contrib.auth.backends import ModelBackendfrom django.db.models import Q
# 让用户可以用邮箱登录
# setting 里要有对应的配置
class CustomBackend(ModelBackend):
    def authenticate(self, username=None, password=None, **kwargs):
        try:
            user = UserProfile.objects.get(Q(username = username) | Q(email=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None

记得引入models中创建的表

# AUTH 方法(支持邮箱登录)
AUTHENTICATION_BACKENDS = (‘users.views.CustomBackend‘,)

setting中加入该方法

完成

时间: 2024-10-01 22:07:27

django 修改默认的user表和默认的认证系统的相关文章

django认证系统 Authentication

Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. Django的认证系统包含了身份验证和权限管理两部分.简单地说,身份验证用于核实某个用户是否合法,权限管理则是决定一个合法用户具有哪些权限.往后,‘认证’这个词同时代指上面两部分的含义. Django的认证系统主要包括下面几个部分: 用户 许可 组 可配置的密码哈希系统 用于用户登录或者限制访问的表单和视图工具 可插拔的后台系统 类似下面的问题,不是Django认证系统的业务范围,请使用第三方工具: 密

MySQL修改表的默认字符集和修改表字段的默认字符集

修改表的默认字符集: ALTER TABLE table_name DEFAULT CHARACTER SET character_name; 修改表字段的默认字符集: ALTER TABLE table_name CHANGE field field field_type CHARACTER SET character_name [other_attribute] 修改表的默认字符集和所有列的字符集: ALTER TABLE table_name CONVERT TO CHARACTER SE

Django自定义用户表替换默认用户表认证

1.自定义用户表 from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. class UserProfile(AbstractUser):   ##引用Django内置的AbstractUser表,并添加下列字段     nick_name = models.CharField(max_length=50,default="",

修改Delphi工具控件的默认字体

修改Delphi工具控件的默认字体: 注册表: Delphi 6:    HKEY_CURRENT_USER\Software\Borland\Delphi\6.0Delphi 7:    HKEY_CURRENT_USER\Software\Borland\Delphi\7.0下增加一个名为“FormDesign”的项,再在这个项下面新建一个字符串值:新建字串:DefaultFont ,值为: 宋体,9[注意不是原来的Form Design 项,新建项没有空格] 参考:http://www.c

mysql表ibdata1数据切换到单个表储存、默认导出的表结构

释放MySQL ibdata1文件的空间 mysqldump选项: --add-drop-table:在每个创建数据库表语句前添加删除数据库表的语句: --add-locks:备份数据库表时锁定数据库表: --all-databases:备份MySQL服务器上的所有数据库: --comments:添加注释信息: --compact:压缩模式,产生更少的输出: --complete-insert:输出完成的插入语句: --databases:指定要备份的数据库: --default-charact

各种默认回车提交表单

总结: 1.如果form里面只有一个input type=text,那么无论有没有submit按钮,在input中回车都会提交表单.如果不想回车提交,需要再加一个input type=text,然后设置display:none. 2.如果form里面多于一个input type=text,那么必须有一个submit按钮才可以回车提交表单. 按钮可以是input也可以是button,他们应设置type=submit.如果只写button而不写type,那么IE下type=button,FF下则是t

修改与文件类型关联的默认程序

13/12/27 安装了Planner项目管理软件后,发现.planner文件的默认打开程序为gedit.想要将其修改过来,在open with的程序列表里也没有planner这一项,而且也无法人工指定命令行,似乎这一功能被Nautilus关掉了.通过网上搜索,Gnome系统中文件类型的描述,即mimetype,存放于/usr/share/mime与~/.local/share/mime目录下.而用于描述应用程序所能打开的文件类型则主要放在其中的application子目录中.可以看到,其中已经

mysql 表名默认 windows不区分大小写 在linux区分大小写

MySQL在Linux下数据库名.表名.列名.别名大小写规则:  1.数据库名与表名是严格区分大小写 2.表的别名是严格区分大小写 3.列名与列的别名在所有的情况下均是忽略大小写的 4.变量名也是严格区分大小写的 注意: A.Linux下MySQL安装完后默认:区分表名的大小写,不区分列名的大小写 B.改变表名的大小写区分规则的方法:用root帐号登录,在/etc/my.cnf 或 /etc/mysql/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1

SQL Server 删除表的默认值约束

首先查出字段的默认值约束名称,然后根据默认值约束名称删除默认值约束 declare @constraintName varchar(200) select @constraintName = b.name from syscolumns a,sysobjects b where a.id=object_id('TB_KYSubProject') and b.id=a.cdefault and a.name='Final_Belong_Programme' and b.name like 'DF%