连接到basecrm api(v2)的django应用程序

django-basecrm的Python项目详细描述


https://badge.fury.io/py/django-basecrm.svghttps://travis-ci.org/yunojuno/django-basecrm.svg?branch=master

django basecrm

连接到BaseCRM API(v2)的django应用程序

这个包现在只支持python3,并且支持django 1.11及更高版本。对于以前的版本,请参阅python2分支。

一个轻量级django应用程序,用于包装requests库并为basecrm api提供简单的端点。

请注意,这不是一个complete客户端sdk;它是一个具有我们需要的功能的助手应用程序。感谢您的贡献。

utils模块提供了一个request()方法,该方法允许对basecrm api进行较少的重配置调用,依赖于设置,同时仍然允许传递和/或重写所有选项,无论是对于requests还是对于api端点本身。也有帮助程序来parse()count()结果(parse删除元数据,而count返回服务器端计数预分页)。

helpers模块还提供了一些更高级别的方法,用于与contactsdealspipelinestages端点进行交互(顶级__init__模块公开了这些端点)。还有一个设置用于检索和缓存管道的阶段(当前仅支持1个)。

功能

  • 低配置开销,因此从代码中的任何位置调用api方法都很容易
  • CREATEUPDATE调用的预提交验证将引发可捕获的自定义异常
  • 灵活的序列化器从Django ORM对象平凡的
  • 中创建BaseCrm对象

电流限制

  • 当前仅支持单个管道。
  • 默认情况下,阶段和管道缓存在应用程序级别(内存中),不公开缓存破坏方法。
  • 没有实现DELETE调用
  • CREATEUPDATE仅在contactsdeals终结点上实现
  • GET仅对contactsdealsnotespipelinesstages实现
  • 序列化程序只能单向使用;它们不会反序列化
  • 可能还有很多人…

安装

您可以使用…:

从pypi安装django-basecrm
pip install --upgrade django-basecrm

设置

至少,您需要在settings.py中添加以下内容:

BASECRM_API_URL='https://api.getbase.com/v2/'
BASECRM_API_KEY=xxxx
BASECRM_INSTANTIATE_ON_START=False # If this is set to True, the pipeline ID and stage IDs will be retrieved when the app is started for the first time, and then held in memory

…放置自己的api键而不是xxx,obv。注意api url是完全限定的,包括协议尾随斜杠

您还需要将此应用程序添加到您的INSTALLED_APPS;在哪里(按顺序)并不重要:

INSTALLED_APPS = [
    ...
    'django_basecrm',
    ...
]

接下来,您可能需要扩展序列化程序以满足您的模型。

例如,假设您有一个名为people的应用程序,其中包含一个名为Person的自定义User配置文件模型,该模型表示要在基本目录中跟踪的联系人。

我们还假设您的模型有一个用于info的属性,一个用于phone@property,以及一个与User的单点关系。

创建people/serializers.py并粘贴以下代码:

from django_basecrm import get_contacts, create_contact
from django_basecrm.serializers import ContactModelSerializer

class PersonSerializer(ContactModelSerializer):
    is_organization = False
    description = 'info'

    def get_email(self, obj):
        return obj.user.email

    class Meta:
        model = 'people.Person'

注意事项:

  • 我们正在扩展ContactModelSerializer;还有一个DealModelSerializer行为相同,但为deal端点的字段设置
  • 我们显式地将is_organization字段设置为False;假设您的模型没有同名的字段(或属性),则永远不会自动重写此字段。
  • description字段设置为在运行时获取对象的info字段的值
  • 在运行时,phone字段将类似地获取对象的phone属性的值;我们不需要指定它,因为字段的名称是相同的
  • 虽然未显式定义email字段,但它将由get_email方法的返回值填充。在为相关字段设置序列化程序值时,任何get_*方法都将始终具有优先权。
  • Meta.model属性设置为字符串,同时包含应用程序名和模型名–任何其他字符串格式都将失败。但是可以直接指定类(例如model = Person)。
  • 注意,您还可以将fields指定为meta子类的属性;这将覆盖序列化程序的字段列表

一旦你完成了这一步,你只需要调用函数,也许在你的peopleapp中创建一个模块来提供create_person_from_objectmethods等等。

使用上述模型和序列化程序的basecrm联系人的示例get_or_create函数可能如下所示:

def get_or_create_person(person_id):
    person = Person.objects.get(pk=person_id)
    base_contacts = django_basecrm.get_contacts(email=person.user.email))
    if len(base_contacts) > 1:
        # This shouldn't happen if we enforce email uniqueness in Django
        raise Exception()
    elif len(base_contacts) == 1:
        base_contact = base_contacts[0]
    else:
        serialized_person = PersonSerializer(person) # This is the serializer we defined above
        base_contact = django_basecrm.create_contact(serialized_person.to_dict())
    return base_contact

贡献

我们非常欢迎您的贡献。请按现有代码覆盖并提交单元测试所涵盖的所有代码。

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

推荐PyPI第三方库


热门话题
SpringMVC中的java,当我遇到旋度时,SpringMVC中出现错误   java如何从设备获取默认ip地址?   plink运行autosys批处理作业并检查其在java中的状态   java Json数组对象通过控制器[Spring Boot]传递到模型   netbeans将java命令行参数传递给插件   java Android AIDL gen文件导致警告?   java JAXB阻止JAXB与共享实体序列化   由@JsonIdentityInfo序列化的对象的java反序列化   postgresql java数组插入postgres   Java圆环碰撞检测   在Java中提取JSON键名   jdk1中的java内存泄漏。7   java Spring 3@Autowired注释问题