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中map、any、all函数用法分析
Apr 21 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 Python
python中for用来遍历range函数的方法
Jun 08 Python
python 实现分页显示从es中获取的数据方法
Dec 26 Python
Python print不能立即打印的解决方式
Feb 19 Python
解决python虚拟环境切换无效的问题
Apr 30 Python
python 写函数在一定条件下需要调用自身时的写法说明
Jun 01 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
pycharm 关闭search everywhere的解决操作
Jan 15 Python
python 批量压缩图片的脚本
Jun 02 Python
分享python函数常见关键字
Apr 26 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 中使用随机数的三个步骤
2006/10/09 PHP
php下批量挂马和批量清马代码
2011/02/27 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
php微信公众号开发模式详解
2016/11/28 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
javascript 有用的脚本函数
2009/05/07 Javascript
11款基于Javascript的文件管理器
2009/10/25 Javascript
理解Javascript_07_理解instanceof实现原理
2010/10/15 Javascript
jquery中动态效果小结
2010/12/16 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
深入理解vue-loader如何使用
2017/06/06 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
js实现淘宝首页的banner栏效果
2019/11/26 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
在python中利用KNN实现对iris进行分类的方法
2018/12/11 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
应届大学生求职的自我评价
2013/11/17 职场文书
电气技术员岗位职责
2013/11/19 职场文书
机关门卫岗位职责
2013/12/30 职场文书
入党自传范文2015
2015/06/26 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
MySQL基础(一)
2021/04/05 MySQL
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js
Python 可迭代对象 iterable的具体使用
2021/08/07 Python