剑桥大学查找服务的django模块

django-ucamlookup的Python项目详细描述


简介

Django Ucamlookup是一个库,它提供有用的方法和模板来集成 Django剑桥大学申请 Lookup service

配置

以下参数是可在django设置中使用的可选配置。

  • UCAMLOOKUP_HOST。可选。默认值:"www.lookup.cam.ac.uk"。指定用于 IBisClientConnection。这是将用于进行所有与查找相关的api调用的连接对象。
  • UCAMLOOKUP_PORT。可选。默认值:443。指定用于 IBisClientConnection。这是将用于进行所有与查找相关的api调用的连接对象。
  • UCAMLOOKUP_URL_BASE。可选。默认值:""。指定用于 IBisClientConnection。这是将用于进行所有与查找相关的api调用的连接对象。
  • UCAMLOOKUP_CHECK_CERTS。可选。默认值:True。指示客户端是否应检查服务器端 证书有效。
  • UCAMLOOKUP_USERNAME。可选。默认值:None。指定用于 IBisClientConnection。这是将用于进行所有与查找相关的api调用的连接对象。我们 建议使用查找组进行身份验证,而不是使用单个Raven帐户。
  • UCAMLOOKUP_PASSWORD。可选。默认值:None。指定用于 IBisClientConnection。这是将用于进行所有与查找相关的api调用的连接对象。我们 建议使用查找组密码进行身份验证,而不是使用单个Raven帐户密码。

使用

使用pip安装django ucamlookup:

pip install django-ucamlookup

将django ucamlookup添加到项目配置设置中已安装的应用程序中。py:

INSTALLED_APPS=(...'ucamlookup',...),

以及urls.py文件中的url条目:

urlpatterns=patterns(...# lookup/ibis urlsurl(r'^ucamlookup/',include('ucamlookup.urls')),...)

警告

查找包含剑桥大学成员的个人数据。请确保仅将此数据显示给 有权查看此数据的用户。

联网

如果没有指定可选设置,django ucamlookup将使用anonymous作为用户名,并且在 设置IBisClientConnection并执行查找API。这种匿名连接仅可用 剑桥大学网络内部。如果应用程序部署在CUDN之外,则应使用 使用UCAMLOOKUP_USERNAMEUCAMLOOKUP_PASSWORD进行可选身份验证。

我们不建议使用单独的Raven帐户,而是设置查找组。用户可以生成 组的密码,并使用组短名称作为身份验证的用户名。

查找用户

django ucamlookup在每次要保存用户对象时(无论是新的还是更新的)修改该对象,并将其分配给 last_name属性查找该用户的可见名称。用户名用于在查找中搜索此用户。

查找组

django ucamlookup包含一个名为lookupgroup的新模型,它用于缓存查找模型。用来储存 查找组ID及其名称,因此用于减少对查找服务的调用次数。也可以是 用于创建与其他模型的关系。例如,假设我们有一个称为secret的模型,我们只想让 对特定组内用户的访问。我们将建立一个从秘密到 查找组。

每次保存(新建或更新)组时,都会从查找服务检索该组的名称。名字是 存储在类的name属性中,查找组的id存储在lookup\u id中。

必须指出,此模型不用于缓存查找用户和查找组之间的关系。这些 关系总是查询到实时查找服务。该模型仅用于让开发人员建立关系 中间模式包含查找组并缓存组名称的ls。

模板宏

模板中可以使用两个宏:ucamlookup_users,和ucamlookup_groups。 这些宏具有javascript函数,可以将htmlselect标记转换为交互式 将与查找服务交互并允许用户使用自动完成功能的选择控件 并搜索查找用户和组。

若要包含可搜索和添加单个或列表用户的选择控件,请使用 ucamlookup_users宏。您应该将htmlselectid作为参数传递给宏。 如果希望控件添加多个用户,则应设置multiple参数。

<selectid="authors_id"name="authors"multiple="multiple"></select>

    {% include 'ucamlookup_users.html' with input_tag_id="authors_id" multiple=true placeholder='Select an author' %}

如示例所示,您可以使用placeholder参数设置占位符文本。

如果要在输入标记中显示现有的{{*CD24>}记录,则应该使用^ {CD25>}标签 模板如下例所示:

<selectid="authors_id"name="authors"multiple="multiple">
        {% for user in authors %}
            <optionselected=selectedvalue="{{ user.username }}">
                {{user.last_name}} ({{ user.username }})
            </option>
        {% endfor %}
    </select>

    {% include 'ucamlookup_users.html' with input_tag_id="authors_id" multiple=true %}

您还必须在模板的htmlheader中包含以下宏才能加载 关联的js和css文件。如果要包含自己的宏,这些宏需要jquery jquery库或您已经在模板中使用它使用参数jquery来指定 它。

    {% include 'ucamlookup_headers.html' with jquery=True %}

您的select标记将转换为允许用户搜索的选择控件 使用用户名或全名的用户。提交表单时,将列出 crsid将与任何普通的select标记一起随请求发送。

如果需要自定义控件的样式,可以使用ucamlookup-user-container 容器部分的类和 控制权。

同样的方法也适用于查找组,如下例所示:

<selectid="groups_id"name="groupids"multiple="multiple">
        {% for group in groups %}
            <optionselected=selectedvalue="{{ group.lookup_id }}">
                {{group.name}}
            </option>
        {% endfor %}
    </select>
    
    {% include 'ucamlookup_groups.html' with input_tag_id="groups_id" multiple="true" %}

管理界面

管理界面被调到为lookupgroup模型添加管理选项。add选项将显示相同的 ajax查找集成输入作为上面描述的模板宏。

它还为用户更改了add表单,并在 管理员希望向应用程序添加新用户。

这些输入表单允许在新用户和查找时搜索名称和crsid 小组。

可用功能

该模块还提供了一些有用的函数,可以在应用程序中使用,这些函数可以执行对查找服务所需的所有调用。

get_group_ids_of_a_user_in_lookup(user):返回用户的组id列表

user_in_groups(user, lookup_groups):如果用户是 通过参数传递的查找组列表。如果用户在任何组中,则返回true;否则返回false

get_institutions(user=None):返回使用查找ucam服务的机构列表。机构 用户传递的参数将首先显示在返回的列表中

validate_crsid_list(crsids):它从 并返回与 已通过CRSID。

get_or_create_user_by_crsid(crsid):返回对应于crsidUser对象。 通过。如果它不存在于数据库中,则创建它。

validate_groupid_list(groupids):它从 模板宏(如前所述)并返回与 crsids通过了。

get_or_create_group_by_groupid(groupid):返回与 groupid通过。如果它不存在于数据库中,则创建它。

get_institution_name_by_id(institution_id, all_institutions=None):根据id返回机构的名称 通过。如果所有的搜索机构都通过了(来自get_institutions的结果),则使用以下命令在本地进行搜索 列表而不是查找调用。

最后两个方法可用于将机构添加到模型中,并在管理器中显示名称而不是代码 接口

classMyModelAdmin(ModelAdmin):all_institutions=get_institutions()model=MyModellist_display=('institution',)list_filter=('institution_id',)definstitution(self,obj):returnget_institution_name_by_id(obj.institution_id,self.all_institutions)institution.admin_order_field='institution_id'

开发ing

运行测试

tox被配置为在一个容器上运行,该容器结合了python和django的不同版本的矩阵执行。 它还将显示覆盖范围和任何可能违反PEP8的行为。

$ docker-compose up

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

推荐PyPI第三方库


热门话题
如果Col1包含输入文本的任何子字符串,则使用mysql查询获取数据   JavaJSP错误:根据TLD,标记表单:输入必须为空,但不能为空   java InputSource和InputStream之间有什么区别?   java Android Studio新项目   java Rest服务调用未触发处理程序   安卓如何在Java中正确使用二进制信号量?   java多线程:这是正确的方法吗?   递归调用submit时的javajquery表单   Tablayout片段的java实现接口(Android)   java如何将HSSFWorkbook转换为CSV文件。。?   java通过SSHJ迁移到超级用户不工作   Web服务的java JSON参数   爪哇为什么是太阳。经营OperatingSystemImpl包是否可见?   java Tomcat管理器未显示嵌入式版本   java为什么这个查询无效?