dajngo 自定义用户系统的两种方案
2014-03-19 13:13
239 查看
http://segmentfault.com/q/1010000000424111
django 自身带了一个用户系统和认证系统,使用起来挺方便的。可是要拓展这个用户系统的时候,有几种方法,大家讨论一下那个比较好呢
1 自定义Model中使用OneToOneField的方式来扩展,比如实现一个model Profile。通过在 Profile里添加user额外的字段,并且也一个默认的get_profile方法来获取这个profile。做这个的时候,感觉对Django的影响最小。可是有个问题,就是获取资料的时候需要一次join表。大概代码如下
2 第二种方式就是 django 1.5 以后的方法,通过 从AbstractBaseUser, PermissionsMixin开始派生出一个自定用户Model,并且实现自定义的BaseUserManager就能够使用Django来创建用户。为了在Django管理界面管理自定义的用户,还需要实现自定义的UserAdmin。官方例子为
https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#extending-the-existing-user-model
这两种方式,那个更好呢,感觉第一个的扩展性更好,但是生成两张表关联会影响查询性能。第二种方法和框架本身的耦合性又变高了。
大家有什么好的实践么?
django 自身带了一个用户系统和认证系统,使用起来挺方便的。可是要拓展这个用户系统的时候,有几种方法,大家讨论一下那个比较好呢
1 自定义Model中使用OneToOneField的方式来扩展,比如实现一个model Profile。通过在 Profile里添加user额外的字段,并且也一个默认的get_profile方法来获取这个profile。做这个的时候,感觉对Django的影响最小。可是有个问题,就是获取资料的时候需要一次join表。大概代码如下
from django.db import models from django.contrib.auth.models import User class Profile(models.Model): user = models.OneToOneField(User)
2 第二种方式就是 django 1.5 以后的方法,通过 从AbstractBaseUser, PermissionsMixin开始派生出一个自定用户Model,并且实现自定义的BaseUserManager就能够使用Django来创建用户。为了在Django管理界面管理自定义的用户,还需要实现自定义的UserAdmin。官方例子为
https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#extending-the-existing-user-model
这两种方式,那个更好呢,感觉第一个的扩展性更好,但是生成两张表关联会影响查询性能。第二种方法和框架本身的耦合性又变高了。
大家有什么好的实践么?
相关文章推荐
- go数据类型之结构体(用户自定义类型两种方式)
- 从源代码剖析Struts2中用户自定义配置转换器的两种方式——基于字段的配置转换器和基于类型的配置转换器(解决了实际系统中,因没有区分这两种工作方式的生命周期而引起的异常错误问题)
- 常规功能和模块自定义系统 (cfcmms)—019自定义grid方案(3)
- 系统开发中的用户权限的两种流行实现。
- Emos 老邮件系统用户迁移方案
- centos5.6 (64bit)编译安装vsftpd-2.3.4的配置(两种用户登录)[连载之电子商务系统架构]
- 企业级用户管理系统数据融合方案
- solr 自定义QueryParser 用户查询解析方案
- 两种自定义安全键盘&屏蔽系统输入法
- Android 开发中使用的颜色可以分为两种,自定义颜色和系统颜色
- 内核知识第12讲,SSDT表.以用户模式到系统模式的两种方式.
- Android Chromium:成功地获取到用户自定义的系统默认字体设置
- 两种自定义表单设计方案 [原创]
- 单用户登录系统的设计与实现方案
- 实现Sbo系统与用户菜单自定义
- 第二十天-linux系统用户权限集中管理方案
- 自定义ActiveX控件帮助WEB端跳过沙箱访问用户系统资源
- 用户行为分析业务系统日志处理方案
- 谈谈CMS内容管理系统的两种方案:XSL+XML和HTML
- 【PHP自定义显示系统级别的致命错误和用户级别的错误】