django 自定义用户user模型的三种方法_python

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种方法各有优劣,大家根据自己的需求,自由选择吧。

时间: 2024-09-14 19:20:46

django 自定义用户user模型的三种方法_python的相关文章

MYSQL添加远程用户或允许远程访问三种方法

mysql教程添加远程用户或允许远程访问三种方法 用root用户登陆,然后: grant all privileges on *.* to 创建的用户名 @"%" identified by "密码"; flush privileges;   * 刷新刚才的内容* 格式:grant 权限 on 数据库教程名.表名 to 用户@登录主机 identified by "用户密码";             @ 后面是访问mysql的客户端ip地址(或

python实现每次处理一个字符的三种方法_python

本文实例讲述了python每次处理一个字符的三种方法.分享给大家供大家参考. 具体方法如下: a_string = "abccdea" print 'the first' for c in a_string: print ord(c)+1 print "the second" result = [ord(c)+1 for c in a_string] print result print "the thrid" def do_something(

在Python中调用ggplot的三种方法_python

本文提供了三种不同的方式在Python(IPython Notebook)中调用ggplot. 在大数据时代,数据可视化是一个非常热门的话题.各个BI的厂商无不在数据可视化领域里投入大量的精力.Tableau凭借其强大的数据可视化的功能成为硅谷炙手可热的上市公司.Tableau的数据可视化的产品,其理论基础其实是<The Grammar of Graphic>,该书提出了对信息可视化的图表的语法抽象体系,数据的探索和分析可以由图像的语法来驱动,而非有固定的图表类型来驱动,使得数据的探索过程变得

获得更好数据中心模型的三种方法

人们很少有获得数据中心动态和变化的更好的方法.而在实际应用中,其变化更为复杂,因此人们采购精确的虚拟设施模型获取数据中心的动态和数据.   随着人们越来越多地依赖于数据中心为他们的生活各方面运行的软件,数据中心的能耗问题变得越来越突出.而利用数据中心模型是确保新的或现有的数据中心设施使用最有效的方式使用能源的最佳途径之一. 由于数据中心的能源效率是一个非常重要的话题,Facebook公司.彭博社.IBM公司.Comcast公司.英特尔公司,以及Verizon公司与美国国家科学基金会和四所大学合作

python批量下载图片的三种方法_python

有三种方法,一是用微软提供的扩展库win32com来操作IE,二是用selenium的webdriver,三是用python自带的HTMLParser解析.win32com可以获得类似js里面的document对象,但貌似是只读的(文档都没找到).selenium则提供了Chrome,IE,FireFox等的支持,每种浏览器都有execute_script和find_element_by_xx方法,可以方便的执行js脚本(包括修改元素)和读取html里面的元素.不足是selenium只提供对py

分享Android应用向用户发信息的三种方式

Android应用向用户发送提示信息的三种方法是: 1)发送Toast信息 2)弹出对话框 3)发送通知 方式1:发送Toast信息: 这种方式最简单,在之前的学习中多次使用过.Toast是在一个浮动于应用之上的View中显示信息,显示一定的时间间隔后自动消失,不可获得焦点. 最简单的用法就是之前的学习中一直使用的:通过一个静态的makeText()方法返回一个Toast对象,然后调用show()方法. 如: 布局文件添加一个Button: <Button         android:id=

Android 自定义弹性ListView控件实例代码(三种方法)

关于在Android中实现ListView的弹性效果,有很多不同的方法,网上一搜,也有很多,下面贴出在项目中经常用到的两种实现ListView弹性效果的方法(基本上拿来就可以用),供大家参考: 弹性ListView 第一种方法: import android.content.Context; import android.content.res.Configuration; import android.util.AttributeSet; import android.util.Display

ThinkPHP实例化模型的四种方法概述_php实例

本文讲述了ThinkPHP实例化模型的四种方法,对于ThinkPHP程序设计来说有非常重要的应用.具体如下: 1.创建一个基础模型:实例化一个系统自带的数据库操作类    Test.Model.class.php页面代码如下: class TestModel extends Model{ }    UserAction.class.php页面代码如下: function test(){ $test=M('test');//表示实例化的是自带的Model类,并且传入test值表示操作的是test表

衡量网络营销效果的三种方法 探讨Engagement的适用性问题

中介交易 SEO诊断 淘宝客 云主机 技术大厅 在之前的<网络营销效果衡量的核心指标>连载中,介绍了什么是Engagement,Engagement包含哪些指标,如何定义这些指标,以及如何通过技术方式监测到这些指标.这期将问题更深入,探讨Engagement的适用性问题. 由于Engagement的灵活性,它至少在三个领域具有极高的研究价值.其一,它对于衡量总体(宏观)效果的达成有帮助;其二,在确知流量质量的情况下,它能衡量网站对用户的影响程度(即一般我们所称的网站的质量);其三,在确知网站质