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 = ...
随机推荐
- jvm的解释执行与编译执行
1.原理 字节码无法直接交给硬件执行需要虚拟机翻译成机器码才能执行,“翻译”的策略有两种:解释执行和编译执行又称即使编译(JIT).解释执行是没执行一句字节码的时候把字节码翻译成机器码并执行,优点是启 ...
- mysql从5.5直接升级到5.7后,执行mysql_upgrade速度很慢且执行结束后数据目录大小增加一倍及 mysqlpump备份出现1577错误
mysql官网不支持夸大版本升级,比如跳过5.6直接升级到5.7,但由于一些客观原因,项目需要从5.5直接升级到5.7,以下是具体操作 1.备份之前mysql,(数据量少,可直接拷贝安装目录及data ...
- 20175330 2018-2019-2 《Java程序设计》第八周学习总结
# **教材学习内容总结### 本周学习<Java程序设计>第十五章:*** 泛型: 泛型(Generics)的主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构.泛型类 ...
- nginx + tomcat = http && https
Tomcat版块配置: vim /to/path/conf/server.xml <Server port="" shutdown="SHUTDOWN"& ...
- Bootstrap学习(一):Bootstrap简介
一.Bootstrap简介 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更 ...
- Elicpse使用技巧-打开选中文件文件夹或者包的当前目录
很多时候,我们需要在eclipse那里打开选中文件(文件夹,包)的当前目录,在资源管理器那里显示这个目录,这个时候,我们又不想采用“选中文件/文件夹/包名--右击--Properties--Locat ...
- Java执行JavaScript脚本破解encodeInp()加密
一:背景 在模拟登录某网站时遇到了用户名和密码被JS进行加密提交的问题,如图: 二:解决方法 1.我们首先需要获得该JS加密函数,一般如下: conwork.js var keyStr = " ...
- 1. FPGA内部的逻辑资源
CLB(包括LUT.加法器.寄存器.MUX(多路选择器)) 时钟网络资源(全局时钟网络,区域时钟网络,IO时钟网络),理解时钟网络的本质和意义 时钟处理单元(PLL,DCM),理解时钟网络资源和时钟处 ...
- [2017BUAA软工助教]个人项目准备工作
BUAA软工个人项目准备工作 零.注册Github个人账号(你不会没有吧..) 这是Git的使用教程: http://www.cnblogs.com/schaepher/p/5561193.html ...
- 【kindle笔记】之 《黑客微百科》-2018-6-17
前段时间复习六级的时候,从图书馆看到一本书,然后带回来了.今天开始读.今天是2018年6月17日. 严格来讲,一本不算kindle笔记的笔记,不过广义的啃豆笔记了解一下.哈哈. 首页说到的黑客理念是: ...