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中__call__方法示例分析
Oct 11 Python
探究Python多进程编程下线程之间变量的共享问题
May 05 Python
Flask框架Jinjia模板常用语法总结
Jul 19 Python
python 重命名轴索引的方法
Nov 10 Python
详解Python3注释知识点
Feb 19 Python
scrapy-redis的安装部署步骤讲解
Feb 27 Python
学Python 3的理由和必要性
Nov 19 Python
python已协程方式处理任务实现过程
Dec 27 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
Jan 14 Python
flask框架url与重定向操作实例详解
Jan 25 Python
tensorflow实现将ckpt转pb文件的方法
Apr 22 Python
python3使用diagrams绘制架构图的步骤
Apr 08 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 进度条函数的简单实例
2017/09/19 PHP
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
jQuery leonaScroll 1.1 自定义滚动条插件(推荐)
2016/09/17 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
2019/06/17 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
python类和继承用法实例
2015/07/07 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
详解HTML5表单新增属性
2016/12/21 HTML / CSS
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
英语专业个人求职自荐信
2013/09/21 职场文书
餐饮业创业计划书范文
2014/01/06 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
李强为自己工作观后感
2015/06/11 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python