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 相关文章推荐
PHP魔术方法__ISSET、__UNSET使用实例
Nov 25 Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
May 16 Python
python的numpy模块安装不成功简单解决方法总结
Dec 23 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
Python装饰器用法实例分析
Jan 14 Python
python学生管理系统开发
Jan 30 Python
简单了解Django应用app及分布式路由
Jul 24 Python
通过代码实例了解Python异常本质
Sep 16 Python
利用Python发送邮件或发带附件的邮件
Nov 12 Python
python爬虫请求头的使用
Dec 01 Python
Python实现Word文档转换Markdown的示例
Dec 22 Python
在Windows下安装配置CPU版的PyTorch的方法
Apr 02 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
php2html php生成静态页函数
2008/12/08 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
php伪静态验证码不显示的解决方案
2019/09/26 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
jquery div拖动效果示例代码
2013/12/08 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
jQuery实现对象转为url参数的方法
2017/01/11 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
2018/10/22 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
python多重继承新算法C3介绍
2014/09/28 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
构建高效的python requests长连接池详解
2020/05/02 Python
Django 解决新建表删除后无法重新创建等问题
2020/05/21 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
美国在线精品家居网站:Burke Decor
2017/04/12 全球购物
前台文员我鉴定
2014/01/12 职场文书
高一化学教学反思
2014/02/05 职场文书
小学语文国培感言
2014/03/04 职场文书
酒店周年庆活动方案
2014/08/21 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
Windows Server 2012 R2服务器安装与配置的完整步骤
2022/07/15 Servers