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 linecache.getline()读取文件中特定一行的脚本
Sep 06 Python
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
Jul 14 Python
python 3利用BeautifulSoup抓取div标签的方法示例
May 28 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
Python实现多进程共享数据的方法分析
Dec 04 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
Python3操作Excel文件(读写)的简单实例
Sep 02 Python
python+gdal+遥感图像拼接(mosaic)的实例
Mar 10 Python
jupyter notebook oepncv 显示一张图像的实现
Apr 24 Python
通过实例简单了解Python sys.argv[]使用方法
Aug 04 Python
python 递归相关知识总结
Mar 03 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 csv操作类代码
2009/12/14 PHP
php echo 输出字符串函数详解
2010/05/13 PHP
php接口与接口引用的深入解析
2013/08/09 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
JavaScript Accessor实现说明
2010/12/06 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
如何让DIV可编辑、可拖动示例代码
2013/09/18 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
2016/05/09 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
python实现剪切功能
2019/01/23 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
Python银行系统实战源码
2019/10/25 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
“四风”问题整改措施和努力方向
2014/09/20 职场文书
2014年共青团工作总结
2014/12/10 职场文书
预备党员入党感言
2015/08/01 职场文书
生产车间管理制度
2015/08/04 职场文书