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 不关闭控制台的实现方法
Oct 23 Python
Python version 2.7 required, which was not found in the registry
Aug 26 Python
python多行字符串拼接使用小括号的方法
Mar 19 Python
python实现蒙特卡罗方法教程
Jan 28 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
Feb 18 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
python OpenCV GrabCut使用实例解析
Nov 11 Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 Python
浅谈Python中re.match()和re.search()的使用及区别
Apr 14 Python
OpenCV-Python 实现两张图片自动拼接成全景图
Jun 11 Python
浅谈Python数学建模之整数规划
Jun 23 Python
如何使用Tkinter进行窗口的管理与设置
Jun 30 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
php5中date()得出的时间为什么不是当前时间的解决方法
2008/06/30 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
php连接与操作PostgreSQL数据库的方法
2014/12/25 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
2016/10/21 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
js随机生成一个验证码
2017/06/01 Javascript
详解js的作用域、预解析机制
2018/02/05 Javascript
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
详解如何用VUE写一个多用模态框组件模版
2018/09/27 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
Python实现保证只能运行一个脚本实例
2015/06/24 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
Python编程求质数实例代码
2018/01/31 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
2019/05/27 Python
利用python实现周期财务统计可视化
2019/08/25 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
夜大毕业自我鉴定
2013/10/11 职场文书
车辆安全检查制度
2014/01/12 职场文书
班组建设经验交流材料
2014/05/12 职场文书
音乐幼师求职信
2014/07/09 职场文书
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
详解Laravel制作API接口
2021/05/31 PHP
浅谈Python响应式类库RxPy
2021/06/14 Python