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中使用wxPython开发的一个简易笔记本程序实例
Feb 08 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
Jan 24 Python
Python Tkinter实现简易计算器功能
Jan 30 Python
python查看模块,对象的函数方法
Oct 16 Python
Python搭建代理IP池实现获取IP的方法
Oct 27 Python
Python数据结构dict常用操作代码实例
Mar 12 Python
python实现俄罗斯方块游戏(改进版)
Mar 13 Python
python实现拼接图片
Mar 23 Python
使用python matploblib库绘制准确率,损失率折线图
Jun 16 Python
python 安装移动复制第三方库操作
Jul 13 Python
基于Django快速集成Echarts代码示例
Dec 01 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
Apr 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
php面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
php对mongodb的扩展(初出茅庐)
2012/11/11 PHP
php 浮点数比较方法详解
2017/05/05 PHP
PHP实现微信退款功能
2018/10/02 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
javascript中数组的sort()方法的使用介绍
2013/12/18 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
详解javascript中的变量提升和函数提升
2018/05/24 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
layui radio点击事件实现input显示和隐藏的例子
2019/09/02 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
用Python制作简单的钢琴程序的教程
2015/04/01 Python
pygame学习笔记(4):声音控制
2015/04/15 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
python实时监控logstash日志代码
2020/04/27 Python
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
HttpServlet类中的主要方法都有哪些?各自的作用是什么?
2014/03/16 面试题
初中生学习的自我评价
2013/11/14 职场文书
学生宿舍管理制度
2014/01/30 职场文书
测试工程师程序员求职信范文
2014/02/20 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
工作会议简报
2015/07/20 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL