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 开发者节省时间的10个方法
Oct 02 Python
详解Python发送邮件实例
Jan 10 Python
Python下的Softmax回归函数的实现方法(推荐)
Jan 26 Python
Python中单例模式总结
Feb 20 Python
python实现windows下文件备份脚本
May 27 Python
利用python库在局域网内传输文件的方法
Jun 04 Python
python去除文件中重复的行实例
Jun 29 Python
python计算两个矩形框重合百分比的实例
Nov 07 Python
python中对_init_的理解及实例解析
Oct 11 Python
基于Python模拟浏览器发送http请求
Nov 06 Python
python如何为list实现find方法
May 30 Python
 python中的元类metaclass详情
May 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
PHP基础知识回顾
2012/08/16 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
功能强大的PHP POST提交数据类
2016/07/15 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
JS获取时间的方法
2015/01/21 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
HTML5 js实现拖拉上传文件功能
2020/11/20 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
python 字符串格式化代码
2013/03/17 Python
Python使用gensim计算文档相似性
2016/04/10 Python
python多线程方式执行多个bat代码
2016/06/07 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
屈臣氏菲律宾官网:Watsons菲律宾
2020/06/30 全球购物
2015年暑期见闻
2015/07/14 职场文书
导游词之天津盘山
2019/11/01 职场文书
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript
【TED出品】天梯非主流开心游1700 划水骑士
2022/03/31 魔兽争霸