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之有容乃大的list(4)
Sep 28 Python
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
Apr 10 Python
python3 下载网络图片代码实例
Aug 27 Python
opencv resize图片为正方形尺寸的实现方法
Dec 26 Python
python numpy--数组的组合和分割实例
Feb 24 Python
python matplotlib实现将图例放在图外
Apr 17 Python
Python实现汇率转换操作
May 03 Python
简单了解Python变量作用域正确使用方法
Jun 12 Python
python中np是做什么的
Jul 21 Python
pycharm激活方法到2099年(激活流程)
Sep 22 Python
python用tkinter开发的扫雷游戏
Jun 01 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.MVC的模板标签系统(二)
2006/09/05 PHP
9个PHP开发常用功能函数小结
2011/07/15 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
PHP实现的同步推荐操作API接口案例分析
2016/11/30 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
javascript面向对象之Javascript 继承
2010/05/04 Javascript
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
JQuery.dataTables表格插件添加跳转到指定页
2017/06/09 jQuery
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
[01:14]英雄,所敬略同——2018完美盛典宣传视频
2018/12/05 DOTA
Python去除字符串两端空格的方法
2015/05/21 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
2020/02/14 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
大四毕业生学习总结的自我评价
2013/10/31 职场文书
幼儿教师考核制度
2014/01/25 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
暂停营业通知
2015/04/25 职场文书
十八大观后感
2015/06/12 职场文书
创业计划书之密室逃脱
2019/11/08 职场文书