这做项目时发现django自带的User中的字段不够用,默认的auth_user表总共只有11个字段,如果需要更多的字段该怎么办,在网上搜了一下,有这么几种方法。

1. 直接修改django 源码,修改User class 的定义,以及各种方法等,然后把数据库auth_user表里的字段扩展到与自己需求一致。(源代码在:django.contrib.auth.models import User),这种方式,每次升级django都得很小心。这种不适用于我们这种新手。

2.把django 的user以及认证部分的源代码拷贝到自己的app下面,然后修改,配置,这样就不需要改动django的代码了.但如果你要升级django ,就可能有麻烦。这种也不适用于我们。

3.继承User,做扩展。这种方法有两种方式,一是继承AbstractUser,另一种是继承AbstractBaseUser。自己试了下继承AbstractUser,在syncdb时不再建立auth_user表,而是建立了以你的模块名为表名的表,你只需要在你的Model里增加你需要的字段即可,比如:

 class CustomUser(AbstractUser):
company = models.CharField(max_length=30,default='无',
verbose_name="公司名")

这样会在数据库中建立xxx_customuser表,其中的字段包含了company,还包含了原来的auth_user中的所有字段。然后在setting.py中添加一句AUTH_USER_MODEL = app名.CustomUser'。而且你仍然可以以request.user的方式获得字段的值。

如果你选择继承AbstractBaseUser,那么除了password、last_login和is_active这三个字段外,你需要自己实现你需要的其它字段,根据需要可以使用django的验证方式,也可以自己编写验证后端,这种方式如果处理不好不知道会不会影响运行,目前还没有深入研究。

4.profile 方式扩展。如果只是添加几个无关紧要的字段的话,这种自己感觉灵活又简便,但是,如果用户很多,访问量较大的话,会对系统性能带来影响。如果你是想用email作为验证方式的话,还是得通过继承User来实现,这也是django1.6推荐的方式。

5.不修改django源码也不增加profile表的扩展用户模型。这个大家可以去搜搜。之前看到这个帖子,感觉很激动,确实是好方法啊,但自己怎么也实现不了,原因是里面的第一句和第三句开发环境提示我无效的变量add_to_class和append,不知道是什么原因,索性没去管它,syncdb后数据库中的字段没有增加,自己无能无法实现,也不知道原因。而且还有一个问题,就算能够成功,在admin页面里能不能显示添加的字段呢?希望有人能够帮我解决这个问题,不胜感激!

 User.add_to_class(obj_name, obj)
UserAdmin.fieldsets = list(UserAdmin.fieldsets)
UserAdmin.fieldsets.append((name, {'fields': fields}))

6.使用contribute_to_class这个函数。自己试了一下,比如:

 company_field = models.CharField(max_length=30)
company_field.contribute_to_class(User, 'company')

确实可以直接就在auth_user表中添加这个字段,但是这个字段无法在admin页面显示出来,我想应该还是有办法的,比如修改源代码或者显示的模板,不过最好是不用修改源代码,还是希望有人能够告诉我实现方法,谢谢了。

以上就是本人这两天的一点点收获,最后对user的扩展还是通过使用profile来实现的。

扩展django的User的部分方法的更多相关文章

  1. Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录

    一,项目题目:扩展Django自带User模型,实现用户注册与登录 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册,登录,用户认证,注销,修改密码等功能. ...

  2. 转载扩展Windows Mobile模拟器存储空间的方法

    扩展Windows Mobile模拟器存储空间的方法 在Windows Mobile应用程序开发的初期,可以使用SDK自带的模拟器来进行调试,这给我们开发人员提供了一种方便的途径.一般的应用程序,占用 ...

  3. [django]django 3种返回json方法

    django 3种返回json方法 1.手动组装字典返回 from django.http import JsonResponse, HttpResponse from django.shortcut ...

  4. 关于visual studio code在win10系统上安装后会报扩展宿主意外终止的解决方法

    我的电脑的地址 C:\Users\Administrator.SC-201810160958\AppData\Local\Programs\Microsoft VS Code\resources\ap ...

  5. Django中redis的使用方法(包括安装、配置、启动)

    一.安装redis: 1.下载: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 2.解压 tar -zxvf redis-3.2. ...

  6. PyCharm Django项目开发的调试方法

    下面介绍两种PyCharm Django项目开发的调试方法: 方法一: 1. 使用PyCharm 自带的django项目Debug工具, 当然前提条件是django项目环境已经搭建好了. 2. 在代码 ...

  7. Codeigniter MongoDB扩展之使用Aggregate实现Sum方法

    本篇文章由:http://xinpure.com/codeigniter-mongodb-extension-using-aggregate-sum-method/ Codeigniter Mongo ...

  8. Django扩展Auth-User表的几种方法

    方式1, OneToOneField from django.contrib.auth.models import Userclass UserProfile(models.Model): user ...

  9. python web框架——扩展Django&tornado

    一 Django自定义分页 目的:自定义分页功能,并把它写成模块(注意其中涉及到的python基础知识) models.py文件 # Create your models here. class Us ...

随机推荐

  1. [地图SkyLine二次开发]关于IE内存限制问题(1G)

    相信很多人也遇到过同样的问题,地图加载中,IE占用的内存一直增加,到了1G多一些的时候,IE就崩溃了. 在网上查阅了一番,有很多结果,下面归纳一下: a).64bit的IE最多可达到4G的内存,但Sk ...

  2. DG的Switchover切换

    用户可以使用角色管理服务,进行主.备库的计划中的角色切换,这个叫switchover,或者是非计划中的角色切换,叫failover. 目的:实现主库(orcl)和从库(standby)的切换 主库参数 ...

  3. JSPatch学习笔记

    本文参考JSPatch wiki :https://github.com/bang590/JSPatch/wiki 1.概念 JSPatch是一个轻量的JS引擎,能够使用JavaScript语言来调用 ...

  4. Centos系统下Lamp环境的快速搭建

    首先为了搭建一个稳定的lamp的练习环境,确保你的虚拟机可以连网,这里我们使用的yum安装,它可以帮助我们解决软件自己的依赖关系.我还在后面加了postgresql数据库如果不需要的话可以去掉和pos ...

  5. SPSS数据分析—二分类Logistic回归模型

    对于分类变量,我们知道通常使用卡方检验,但卡方检验仅能分析因素的作用,无法继续分析其作用大小和方向,并且当因素水平过多时,单元格被划分的越来越细,频数有可能为0,导致结果不准确,最重要的是卡方检验不能 ...

  6. 自己写的一个SqlHelper,感觉使用起来挺方便的

    自己写的一个SqlHelper,感觉使用起来挺方便的 using System; using System.Data; using System.Collections.Generic; using ...

  7. Unity 3D 正交相机(Orthographic)

    1. Camera.aspect 表示摄像机显示区域的纵横比.宽高比,摄像机初始化的时候会默认设置成当前屏幕的宽高比,可以更改,也可以通过 Camera.ResetAspect 来重置. 2. Cam ...

  8. 浅谈对Js闭包的理解

    理解Js的闭包,首先让我们先看几个概念 执行环境(executive environment)每个函数都有自己的执行环境,匿名函数默认为全局环境. 作用域链(scope chain)子函数继承父函数, ...

  9. JavaScript模块化

    1.commonjs 导入: var math = require('math'); math.add(2,3); // 5 导出: module.exports={} 应用会停止并等待加载 2.AM ...

  10. Custom Web Servic In MOSS 2007

    Tools: Visual Studio 2008,Visual Studio 2008 Command Prompt, Sharepoint Server 2007 Generate .disco ...