django mysql数据库使用自己的User
由于我需要的User模型与django自带的User有所不同,所以需要定义自己的User Model,这里记录一下方法,适用于django 1.5+。
因为使用自己的后台,放弃django的管理后台,所以无需在admin.py中注册。
定义MyUserManager和MyUser
修改myapp下的models.py文件:
from django.db import modelsfrom django.contrib.auth.models import (
BaseUserManager, AbstractBaseUser, PermissionsMixin)
class
MyUserManager(BaseUserManager):
def
_create_user(self, username, email, password, **extra_fields):
"""
Creates
and saves a User with the given username, email and password.
"""
ifnot
username:
raise
ValueError('The given username must be set')
email
= self.normalize_email(email)
user
= self.model(username=username, email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return
user
def
create_user(self, username, email, password, **extra_fields):
extra_fields.setdefault('is_staff',
False)
return
self._create_user(username, email, password, **extra_fields)
def
create_superuser(self, username, email, password, **extra_fields):
extra_fields.setdefault('is_staff',
True)
if
extra_fields.get('is_staff')
isnotTrue:
raise
ValueError('Superuser must have is_staff=True')
return
self._create_user(username, email, password, **extra_fields)
class
MyUser(AbstractBaseUser, PermissionsMixin):
username
= models.CharField(max_length=254,
unique=True,
db_index=True)
email
= models.EmailField('email address',
max_length=254)
is_staff
= models.BooleanField('staff status',
default=False)
is_active
= models.BooleanField('active',
default=True)
USERNAME_FIELD
= 'username'
REQUIRED_FIELDS
= ['email']
objects
= MyUserManager()
class
Meta:
db_table
= 'myuser'
def
get_full_name(self):
return
self.username
def
get_short_name(self):
return
self.username
这里的MyUserManager和django的UserManager大同小异,也可以直接继承UserManager,然后修改_create_user函数即可。
MyUser类即为我们自定义的User模型,我们可以根据需要添加各种属性。
修改settings.py
修改settings.py文件,添加如下内容设置认证使用的model:
AUTH_USER_MODEL
= 'myapp.MyUser'
更新数据库
首先删掉之前的数据库,然后重新建立,运行如下命令生成新的数据表:
$
python manage.py makemigrations myapp
$
python manage.py migrate
经过这三步,默认的User模型已经被替换成了我们自己定义的User模型了。当然我们也可以定义自己的认证模型以及权限系统,后面涉及到相关部分再添加笔记了。
如果要使用django管理后台可以参考以下方法:
https://blog.csdn.net/watsy/article/details/15506351
django mysql数据库使用自己的User的更多相关文章
- django mysql 数据库配置
在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库. DATABASES = { 'default': { 'ENGINE': 'django.db. ...
- Django/MySql数据库基本操作&ORM操作
数据库配置: #第一步在settings里面 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbna ...
- Django MySQL数据库操作
上一篇文章写了一些基本的Django操作,下面重点介绍数据库的内容. 对象之间的关系: 一对一 一对多 多对多 1.一对多 先演示一对多的关系,多个blog对应一个名字, 修改blog/models. ...
- Django Mysql数据库-基于双下划线的跨表查询
一.基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系.要做跨关系查询,就使用两个下划线来链接模型(mode ...
- Django Mysql数据库-F查询和Q查询
一.F查询和Q查询 F查询: 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较.F() 的 ...
- Django Mysql数据库-聚合查询与分组查询
一.聚合查询与分组查询(很重要!!!) 聚合查询:aggregate(*args, **kwargs),只对一个组进行聚合 from django.db.models import Avg,Sum,C ...
- python——django使用mysql数据库(二)
上一篇中,我们已经讲述了如何初始化一个django数据库,这一章就来讲讲在实际的项目中如何使用我们初始化的数据库呢? 如还未进行初始化数据库操作,请参考python——django使用mysql数据库 ...
- python——django使用mysql数据库(一)
之前已经写过如何创建一个django项目,现在我们已经有了一个小骷髅,要想这个web工程变成一个有血有肉的人,我们还需要做很多操作.现在就先来介绍如何在django中使用mysql数据库. 前提:已经 ...
- django中mysql数据库设置错误解决方法
刚在django中settings.py进行设置mysql数据库. 当进行执行python manage.py shell命令时会报以下错误: 只需要在settings.py中 DATABASES = ...
随机推荐
- 8.oop-多态
一.继承1.定义:子类继承父类,会继承父类的属性和方法2.语法:extends关键字 子类 extends 父类3.特点:java中的继承是单一继承,子类只能继承一个父类,但是父类可以有多个子类4.用 ...
- SpringBoot之静态资源放行
为了提高开发效率,编写对应的代码生成器.代码生成器主要有两个方面,一个是在线Web,另外一个是运行某个类. 使用的技术是SpringBoot+MyBatis-Plus+MySQL+JDK8. 在编写在 ...
- <网络编程>基本TCP套接字编程
tcp提供了可靠传输,当tcp向另一端发送数据的时候,要求对端返回一个确认.如果没有接收到确认,tcp就重传数据并且等待更长时间,数次重传失败后,tcp才放弃. 建立一个tcp连接会发生如下事情: 服 ...
- 工具篇-Json处理
1. @JsonProperty和@SerializedName注解 使用场景 将一个json格式的字符串转换成某个java对象,或者将一个java对象转换成json格式的字符串时,如果json字符串 ...
- Generative Adversarial Nets[EBGAN]
0. 背景 Junbo Zhao等人提出的"基于能量的GAN"网络,其将判别器视为一个能量函数而不需要明显的概率解释,该函数可以是一个可训练的损失函数.能量函数是将靠近真实数据流形 ...
- tkinter python(图形开发界面)
Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macinto ...
- HAProxy 参数配置
RabbitMQ集群部署完成,通过HAProxy反向代理来提供统一的对RabbitMQ的访问入口. 1.Haproxy提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理.(负载均衡策略有很 ...
- orleans发送广播消息
一个client发送消息给orleans, 就只需要掉用Grain的函数就行了. 但是有时候Grain需要发送消息给client, 在orleans里面, 就只能通过Observer来实现. publ ...
- quartz获取缓存中所有运行中的Job
原文地址:https://blog.csdn.net/zzm8421/article/details/77769203 Quartz 2.1.5: public static void getAllJ ...
- tornado设置cookie并加密
最近看看tornado,遇到了sso的东西,了解下如何设置cookie 1.基本cookie set_cookie 方法在用户的浏览中设置 cookie: get_cookie 方法在用户的浏览中获取 ...