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中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
python 网络爬虫初级实现代码
Feb 27 Python
利用python实现简单的循环购物车功能示例代码
Jul 05 Python
python基本语法练习实例
Sep 19 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
python实现文本界面网络聊天室
Dec 12 Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
Jan 06 Python
django迁移文件migrations的实现
Mar 31 Python
python自定义函数def的应用详解
Jun 03 Python
基于Python 的语音重采样函数解析
Jul 06 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
长波有什么东西
2021/03/01 无线电
YII实现分页的方法
2014/07/09 PHP
php数组随机排序实现方法
2015/06/13 PHP
Thinkphp整合微信支付功能
2016/12/14 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
jquery ajax abort()的使用方法
2010/10/28 Javascript
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
2017/01/13 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
详解JS浏览器事件循环机制
2019/03/27 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
Vue使用screenfull实现全屏效果
2020/09/17 Javascript
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
python判断字符串是否纯数字的方法
2014/11/19 Python
Python制作爬虫采集小说
2015/10/25 Python
你真的了解Python的random模块吗?
2017/12/12 Python
python批量查询、汉字去重处理CSV文件
2018/05/31 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
作为网站管理者应当如何防范XSS
2014/08/16 面试题
大学毕业的自我鉴定
2013/10/08 职场文书
外贸学院会计专业应届生求职信
2013/11/14 职场文书
商场中秋节活动方案
2014/02/07 职场文书
关爱女孩行动实施方案
2014/03/13 职场文书
空乘英文求职信
2014/04/13 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
春季运动会开幕词
2015/01/28 职场文书
学术会议通知范文
2015/04/15 职场文书
Python数据分析入门之数据读取与存储
2021/05/13 Python