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的Flask框架中使用模版的入门教程
Apr 20 Python
Python入门之modf()方法的使用
May 15 Python
Python做文本按行去重的实现方法
Oct 19 Python
tensorflow创建变量以及根据名称查找变量
Mar 10 Python
pygame游戏之旅 添加键盘按键的方法
Nov 20 Python
Python3基础教程之递归函数简单示例
Jun 07 Python
python线程中的同步问题及解决方法
Aug 29 Python
python随机模块random使用方法详解
Feb 14 Python
基于python爬取有道翻译过程图解
Mar 31 Python
python实现猜数游戏(保存游戏记录)
Jun 22 Python
python飞机大战游戏实例讲解
Dec 04 Python
Django中的JWT身份验证的实现
May 07 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+ajax实现无刷新数据分页的办法
2015/11/02 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
JS控件autocomplete 0.11演示及下载 1月5日已更新
2007/01/09 Javascript
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
2016/05/05 Javascript
详解webpack-dev-server的简单使用
2018/04/02 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
2018/11/20 jQuery
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
python实现划词翻译
2020/04/23 Python
总结Python中逻辑运算符的使用
2015/05/13 Python
详解Swift中属性的声明与作用
2016/06/30 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
python实现上传下载文件功能
2020/11/19 Python
Python3 queue队列模块详细介绍
2018/01/05 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
小摄影师教学反思
2014/04/27 职场文书
花坛标语大全
2014/06/30 职场文书
学前教育专业求职信
2014/09/02 职场文书
出纳工作检讨书范文
2014/12/27 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
python元组打包和解包过程详解
2021/08/02 Python