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程序与系统shell交互的方式
Apr 09 Python
详解Python中如何写控制台进度条的整理
Mar 07 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
Python3 单行多行万能正则匹配方法
Jan 07 Python
Python正则表达式实现简易计算器功能示例
May 07 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
Aug 21 Python
python jenkins 打包构建代码的示例代码
Nov 29 Python
如何用OpenCV -python3实现视频物体追踪
Dec 04 Python
Python中base64与xml取值结合问题
Dec 22 Python
Python PyQt5整理介绍
Apr 01 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 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
再次研究下cache_lite
2007/02/14 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
Thinkphp中Create方法深入探究
2014/06/16 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
PHP调用其他文件中的类
2018/04/02 PHP
JavaScript中URL编码函数代码
2011/01/11 Javascript
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
2014/04/30 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
2017/02/14 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
vue遍历对象中的数组取值示例
2019/11/07 Javascript
javascript实现简易的计算器
2020/01/17 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
python提取页面内url列表的方法
2015/05/25 Python
开源Web应用框架Django图文教程
2017/03/09 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
python装饰器原理与用法深入详解
2019/12/19 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
大专应届生个人的自我评价
2013/11/21 职场文书
中学清明节活动总结
2014/07/04 职场文书
授权委托书格式范文
2014/08/02 职场文书
python获取字符串中的email
2022/03/31 Python
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android