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中用于处理字符串的center()方法
May 18 Python
详谈python http长连接客户端
Jun 12 Python
快速了解Python中的装饰器
Jan 11 Python
python 输出上个月的月末日期实例
Apr 11 Python
详解python3 + Scrapy爬虫学习之创建项目
Apr 12 Python
详解Django 时间与时区设置问题
Jul 23 Python
Django用户认证系统 组与权限解析
Aug 02 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
python3实现elasticsearch批量更新数据
Dec 03 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
Mar 31 Python
Python 找出出现次数超过数组长度一半的元素实例
May 11 Python
使用Python FastAPI构建Web服务的实现
Jun 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
星际争霸任务指南——神族
2020/03/04 星际争霸
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
JS的数组的扩展实例代码
2008/07/09 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
基于js判断浏览器是否支持webGL
2020/04/18 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
python判断链表是否有环的实例代码
2020/01/31 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
德国家具折扣店:POCO
2020/02/28 全球购物
解释一下钝化(Swap out)
2016/12/26 面试题
机械制造专业个人的自我评价
2013/12/28 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
《童年》读后感(三篇)
2019/08/27 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
Python 用户输入和while循环的操作
2021/05/23 Python
新手入门Mysql--sql执行过程
2021/06/20 MySQL
分享python函数常见关键字
2022/04/26 Python