定义服务模式的django扩展,用于在不同端点中重用业务逻辑。

serious-django-services的Python项目详细描述


https://github.com/serioeseGmbH/serious-django-services

严肃的django服务定义了django的服务模式。

服务所做的是抽象操作(首先是:模型上的操作) 以及它们远离端点的业务逻辑,因此您可以为 api、graphene端点和经典的html django视图。

每个服务还定义service_exceptions,一个异常列表 可以扔。如果您的serivce中没有这些,请确保只设置service_exceptions = []。 否则,您将在类的定义上得到一个错误,以强制明确 您的服务可以引发异常。


在这个包中,我们只定义了一个Service基类,您需要继承它来编写自己的基类 服务。下面是一个玩具示例:

class WeAreClosedException(Exception):
    pass

class OrderTakeoutService(Service):
    service_exceptions = (WeAreClosedException,)

    @classmethod
    def create_order(cls, customer, item_no):
        if datetime.datetime.now().hour > 22:
            raise WeAreClosedException("Sorry, we're closed after 10pm.")
        if not customer.has_perm(PermissionToOrder):
            raise PermissionDenied("Sorry, you can't order right now.") # when someone was too rude
        order = Order.objects.create(customer=customer, item=item_no)
        return order

现在,您可以将此业务逻辑保留在此服务本地,并在需要的任何地方使用它 创建订单。例如,在石墨烯突变中:

class OrderTakeoutMutation(graphene.Mutation):
    class Arguments:
        item_no = graphene.String()

    success = graphene.NonNull(graphene.Boolean)
    error = graphene.String()
    order_no = graphene.ID()

    def mutate(self, info, item_no):
        # get_user_from_info() is from `serious-django-graphene`
        customer = get_user_from_info(info)
        try:
            order = OrderTakeoutService.create_order(customer, item_no)
        except OrderTakeoutService.exceptions as e:
            return OrderTakeoutMutation(success=False, error=str(e))

        return OrderTakeoutMutation(success=True, order_no=order.pk)

然后可以对rest api或django视图执行非常类似的操作。你的视野没有一级 逻辑需要知道你的关门时间,或者一些客户可能被禁止订购。

快速启动

  1. 使用pip安装软件包:

    pip install serious-django-services
    
  2. 在已安装的应用程序设置中添加“严肃的Django服务”,如下所示:

    INSTALLED_APPS = [
        ...
        'serious_django_services',
    ]
    
  3. 导入serious_django_services.Service,并为要定义的每个服务对其进行子类化。

  4. 在服务上定义所需的操作,每个操作都是@classmethod

  5. 在视图级代码中使用服务的操作。

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

推荐PyPI第三方库


热门话题
创建返回java测试结果的selenium测试方法   java Play2长期socket连接和多线程   java Spring引导Soap web服务创建Jaxb2插件错误   编译器构造如何将三地址码(TAC)转换为Java字节码?   java(泛型)无法对非静态类型T进行静态引用   java Kafka如何向多消费者发送消息   具有复杂类型的动态属性的java Odata   java Apache HttpClient线程   ${catalina.base}/lib子目录中的java属性文件解析   JApplet上的java分层对象(扩展JComponet)   java如何回滚Firebase Realitime数据库Android中的更改   Java正在尝试制作计时器   如何解决java。安卓中的lang.OutOfMemory异常?   将Objective C转换为Java Android没有什么问题   在java中,我不能将两个相同的变量设置为不同的值,但在python中我可以?   c#客户端和java服务器之间的身份验证错误   使用asynctask更改活动时发生java 安卓 admob错误