django 自定义用户user模型的三种方法


Posted in Python onNovember 18, 2014

django version: 1.7.1

最简单的推荐:
使用abstractuser扩充fields

profiles/models.py
from django.db import models

from django.contrib.auth.models import AbstractUser

from django.utils.translation import ugettext_lazy as _
# Create your models here.

class KarmaUser(AbstractUser):

karma = models.PositiveIntegerField(_("karma"),default=0,blank=True)

settings.py
AUTH_USER_MODEL = 'profiles.KarmaUser'

2.使用abstractbaseuser

只有当你对user
model里面的默认字段不满的时候才要使用,这个方法只保留了passwork,last_login,is_active三个字段
参考官方文档:
https://docs.djangoproject.com/en/1.7/topics/auth/customizing/

3.使用一对一关系将相关的模型一个个联系起来

这很像django 1.5之前的方式.很适用于创建第三方扩充包的场景,松耦合,不会破坏之前项目的结构.

需要此方法的场景:
- 在自己的django prj下,希望有多重user拥有各自很不相同的字段.或许希望有些用户组合起来一些用户的类型字段,并且希望能在模型层面上解决这些问题.
例子如下:

profiles/models.py

from django.conf import settings

from django.db import models
from flavors.models import Flavor
class EaterProfile(models.Model):

# 默认用户资料

user = models.OneToOneField(settings.AUTH_USER_MODEL)

favorite_ice_cream = models.ForeignKey(Flavor,null=True,blank=True)
class ScooperProfile(models.Model):

user = models.OneToOneField(settings.AUTH_USER_MODEL)

scoops_scooped = models.IntegerField(default=0)
class InventorProfile(models.Model):

user = models.OneToOneField(settings.AUTH_USER_MODEL)

flavors_invented = models.ManyToManyField(Flavor,null=True,blank=True)

个人认为在我的建站场景中,第二种最合适.正在测试是否可以用抽象类简化模型.待续...

以上3种方法各有优劣,大家根据自己的需求,自由选择吧。

Python 相关文章推荐
全面解析Python的While循环语句的使用方法
Oct 13 Python
Python获取文件所在目录和文件名的方法
Jan 12 Python
Python实现桶排序与快速排序算法结合应用示例
Nov 22 Python
python pygame实现挡板弹球游戏
Nov 25 Python
简单介绍django提供的加密算法
Dec 18 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 Python
keras 特征图可视化实例(中间层)
Jan 24 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
May 26 Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 Python
简述 Python 的类和对象
Aug 21 Python
python3爬虫中引用Queue的实例讲解
Nov 24 Python
使用grappelli为django admin后台添加模板
Nov 18 #Python
django模型中的字段和model名显示为中文小技巧分享
Nov 18 #Python
如何解决django配置settings时遇到Could not import settings 'conf.local'
Nov 18 #Python
github配置使用指南
Nov 18 #Python
Django1.7+python 2.78+pycharm配置mysql数据库教程
Nov 18 #Python
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 #Python
python服务器与android客户端socket通信实例
Nov 12 #Python
You might like
php Http_Template_IT类库进行模板替换
2009/03/19 PHP
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
PHP基础知识介绍
2013/09/17 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
JQuery UI皮肤定制
2009/07/27 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
JS删除数组元素的函数介绍
2013/03/27 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
javascript中传统事件与现代事件
2015/06/23 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
JS实现留言板功能
2017/06/17 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
vue ssr 指南详读
2018/06/29 Javascript
菊花转动的jquery加载动画效果
2018/08/19 jQuery
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
Python如何快速实现分布式任务
2017/07/06 Python
python中for用来遍历range函数的方法
2018/06/08 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
使用CSS3来绘制一个月食图案
2015/07/18 HTML / CSS
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
会计毕业生自我鉴定
2013/11/04 职场文书
赤壁观后感(2)
2015/06/15 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android