用于django的scim 2.0提供程序规范的部分实现。

django_scim的Python项目详细描述


这是scim 2.0[1]的部分提供者端实现 Django使用规范。它包括:

  • djangoUser对象到scim文档的序列化
  • <prefix>/Users/uid
  • 的rest视图
  • <prefix>/Users/.search
  • 的rest视图
  • 涵盖所有运算符和大多数字段的SCIM筛选器查询分析器
  • 有限的可插入性支持

请注意,目前唯一受支持的数据库是postgres。

安装

$ pip install django_scim

然后将django_scimapp添加到django设置中的INSTALLED_APPS 文件和必要的url映射:

urlpatterns = patterns('',
    url(r'^/scim/v2/Users/.search/?$',
        SearchView.as_view(), name='scim-search'),
    url(r'^/scim/v2/Users/([^/]+)$', UserView.as_view(), name='scim-user'),
)

扩展性

默认情况下,django_scim使用User类上的email字段。然而, 如果应用程序使用自定义的 数据库表,您可以重写django_scim.models.SCIMUser并将其 输入:

from django_scim.models import SCIMUser as _SCIMUser

from acme.apps.bb.models import Identity


class SCIMUser(_SCIMUser):
    def __init__(self, user):
        super(SCIMUser, self).__init__(user)
        self.identities = (Identity.objects
                                   .filter(profile__user_id=self.user.id))

    @property
    def emails(self):
        return {i.email: i.primary for i in self.identities}

在这里,我们将多个电子邮件地址保存在一个链接到 UserProfile。接下来,告诉视图使用这个类而不是 默认值:

url(r'^/scim/v2/Users/([^/]+)$', UserView.as_view(usercls=SCIMUser),
    name='scim-user'),

当您的电子邮件地址位于不同的表中时,您还需要扩展 筛选查询分析器,以确保可以在其上进行查询:

from django_scim.filter import SCIMFilterTransformer


class AcmeSCIMTransformer(SCIMFilterTransformer):
    email = lambda *args: 'i.email'

    def join(self):
        return """
            JOIN bb_userprofile p ON p.user_id = u.id
            LEFT OUTER JOIN bb_identity i ON i.profile_id = p.id
            """

并将其传递到视图:

url(r'^/scim/v2/Users/([^/]+)$',
    UserView.as_view(usercls=SCIMUser, parser=AcmeSCIMTransformer),
    name='scim-user'),
[1]http://www.simplecloud.info/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Kotlin应该为Java类中的合成属性进行反射   hadoop。pig脚本与java嵌入式pig:哪一个最快?   java要求用户在不关闭程序的情况下输入一个double而不是字符串   Raspberry PI和windows pc代码之间的java差异   使用maven的基于java Spring引导概要文件的WAR   Java中的内联数组定义   jsf如何在Tomcat上安装和使用CDI?   当数据来自mySQL时,在java的微调器中删除重复项   java如何定制Android ListView的每一行?   对于web应用程序,为什么java也被称为平台无关?   java如何获得排序hashmap中两个给定键之间的所有键值?   帮我把这个Java翻译成Scheme,让我脑子里的东西运转起来   java共享子域cookie   hibernate多Java列表删除   java队列可以用来交换链表的相邻节点吗?   java遇到错误:当我在安卓应用程序中单击主屏幕快捷方式时,找不到应用程序