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判断列表是否已排序的各种方法及其性能分析
Jun 20 Python
Python 中的with关键字使用详解
Sep 11 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
Oct 11 Python
python 实现分页显示从es中获取的数据方法
Dec 26 Python
Pycharm+Scrapy安装并且初始化项目的方法
Jan 15 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
Python利用PyPDF2库获取PDF文件总页码实例
Apr 03 Python
Keras自定义IOU方式
Jun 10 Python
python 如何实现遗传算法
Sep 22 Python
python中判断数字是否为质数的实例讲解
Dec 06 Python
python自动统计zabbix系统监控覆盖率的示例代码
Apr 03 Python
Python-OpenCV实现图像缺陷检测的实例
Jun 11 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获取php,mysql,apche的版本信息示例代码
2014/01/16 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
2014/08/25 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
给Function做的OOP扩展
2009/05/07 Javascript
childNodes.length与children.length的区别
2009/05/14 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
JQuery球队选择实例
2015/05/18 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
回顾Javascript React基础
2019/06/15 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
[01:34]传奇从这开始 2016国际邀请赛中国区预选赛震撼开启
2016/06/26 DOTA
使用Python脚本来获取Cisco设备信息的示例
2015/05/04 Python
深入理解python中的atexit模块
2017/03/07 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
python数据封装json格式数据
2018/03/04 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
pycharm工具连接mysql数据库失败问题
2020/04/01 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
8种常用的Python工具
2020/08/05 Python
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
Boden英国官网:英国知名原创时装品牌
2018/11/06 全球购物
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
个人求职信范文分享
2014/01/06 职场文书
婚前协议书范本两则
2014/10/16 职场文书
停电调休通知
2015/04/16 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技