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中判断文件编码的chardet(实例讲解)
Dec 21 Python
用python处理图片实现图像中的像素访问
May 04 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
Python编程深度学习计算库之numpy
Dec 28 Python
Django 拆分model和view的实现方法
Aug 16 Python
Python 线程池用法简单示例
Oct 02 Python
使用python实现对元素的长截图功能
Nov 14 Python
python绘制BA无标度网络示例代码
Nov 21 Python
Python如何脚本过滤文件中的注释
May 27 Python
Django用户认证系统如何实现自定义
Nov 12 Python
python如何用matplotlib创建三维图表
Jan 26 Python
只用40行Python代码就能写出pdf转word小工具
May 31 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
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
php.ini 中文版
2006/10/28 PHP
数字转英文
2006/12/06 PHP
PHP XML数据解析代码
2010/05/26 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
php 三元运算符实例详细介绍
2016/12/15 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
用JQUERY增删元素的代码
2012/02/14 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
详解Bootstrap glyphicons字体图标
2016/01/04 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
关于vue组件事件属性穿透详解
2019/10/28 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
python发送邮件接收邮件示例分享
2014/01/21 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
python argparse传入布尔参数false不生效的解决
2020/04/20 Python
python下载的库包存放路径
2020/07/27 Python
保荐人的岗位职责
2013/11/19 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
职工趣味运动会方案
2014/02/10 职场文书
小学家长评语大全
2014/04/16 职场文书
主题教育活动总结
2014/05/05 职场文书
竞选班干部演讲稿600字
2014/08/20 职场文书
校长创先争优承诺书
2014/08/30 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
预备党员入党感想
2015/08/10 职场文书
小学语文新课改心得体会
2016/01/22 职场文书