Giter Club home page Giter Club logo

quanttide-handbook-of-django's People

Contributors

guo-zhang avatar

Watchers

 avatar

quanttide-handbook-of-django's Issues

消息推送实现方案

Django消息推送

初步计划使用Django默认的message机制接入,Celery及Django实现作为备选。

Django和DRF库

由于DRF没有默认支持Django message Framework,需要使用drf-messages项目提供接口方便前端或者其他微服务读取。

message框架是用来给用户发一次性消息通知,且是用来跟着某个请求的,比如用户登录表单返回结果。

Backend实现

使用Pulsar。

用框架自带的cache和message分别实现被动获取和主动推送消息。自研django-pulsar会负责实现这个特性,并且尽可能把Pulsar的逻辑翻译成Django,并且适当地根据需要扩展。

singal使用订阅发布模式,和MQ的模式比较符合,只需要把Broker换成MQ就可以。

message和singal等框架有较大可能性不适合改造。这种情况下使用Celery。如果使用Celery,则需要实现Celery的Pulsar broker。

特性

数据同步

同步生产者微服务到消费者微服务。

延时任务

推送消息到MQ,根据延时规则推送,触发相关逻辑运行。

Pulsar原生支持。Django框架是否支持待研究。

定时任务

Django的message、singal、cache都没有支持定时。可以使用django-cron一类的工具来使用操作系统的定时程序,也可以使用Celery实现,或者django-apschedular来解决。

监控和日志

django-cid: 提供了一个Correlation ID,可以追踪同一个请求的环节,方便在日志里追溯链路。对于所谓的“全链路追踪”,这是一个很有用的特性。如果能做到微服务版的全链路追踪就更好了,并且如果可以和云服务配合(比如日志服务)就更好了。

选项字段命名规范

在Django中使用TextChoices类型定义模型字段时,建议为枚举值使用大写字母和下划线来命名,以便更好地阅读和理解。此外,建议在定义枚举值时,使用格式('value', 'verbose_name'),其中value是枚举值的实际值,verbose_name是枚举值的人类可读名称。这有助于提高代码的可读性和可维护性。

例如,如果您要定义一个表示订单状态的枚举类型,可以按以下方式命名:

from django.db import models

class Order(models.Model):
    class Status(models.TextChoices):
        CREATED = 'created', '创建'
        PROCESSING = 'processing', '处理中'
        SHIPPED = 'shipped', '已发货'
        DELIVERED = 'delivered', '已送达'

    status = models.CharField(choices=Status.choices, max_length=20)

在上述代码中,我们定义了一个名为Status的枚举类型,其中包含了四个订单状态枚举值:CREATEDPROCESSINGSHIPPEDDELIVERED。每个枚举值都包含了它的实际值和人类可读名称。在模型中,我们使用CharField类型来存储订单状态,它的选项使用了枚举类型的.choices属性。这样,我们可以在定义订单状态时,不仅可以使用枚举值的实际值,还可以使用人类可读名称,例如:

order = Order.objects.create(status=Order.Status.CREATED)
print(order.get_status_display())  # 输出:'创建'

这有助于提高代码的可读性和可维护性,使代码更易于理解和组织。

number字段及其实现

由于AutoField不可以用在非主键字段,而我们规定必须使用UUID作为主键(以确保分布式系统的一致性得到很好的解决),因此我们需要一个自定义的NumberField来提供类似于AutoField的逻辑。

CharField默认值

默认使用None更合适,因为None表示缺少值,而空字符串''表示一个空的字符串值。

TextFieldCharField字段中,如果使用空字符串''作为默认值,那么当在模型实例中未显式设置该字段时,该字段将被保存为空字符串。这可能会导致意外的行为,例如当使用字符串索引时,将会将空字符串视为一个有效的值。

另一方面,如果使用None作为默认值,则该字段将在模型实例中缺少值时保持为None,这更符合缺少值的语义,并且可以避免上述问题。

因此,建议使用None作为TextFieldCharField字段的默认值,除非您有充分的理由使用空字符串。

微服务版信号机制

Singal提供了一套发布订阅模式的接口。如果可以把消息队列作为底层,就可以提供跨服务的发布订阅能力,就可以把我们系统内的大部分微服务之间的消息传递打通,从而解决这个关键的机制设计问题。

具体我们需要解决Django框架和消息队列的对接方案,通过django-quanttide-cloud定义,云计算标准和Django框架标准的交叉。

可选的方案包括:

  1. cache。使用缓存的读写接口和权限控制,处理只需要被动读写的数据。
  2. signal。实现需要跨服务触发的机制。
  3. celery。基本类似于signal,实现一套任务调度能力。和上述默认框架之间的区别还需要进一步研究。

增加分类字段

分类(classification)字段包括:

  • type类型CharField字段,带预先定义的Choice类。一般不可以嵌套。用以表示系统预置的、和系统内部逻辑密切相关的类型。
  • category类别django-mptt库实现树状结构。用以表示用户定义的业务意义的、可以嵌套的一对多的分类。用法也通常由用户定义。比如淘宝京东的商品分类。
  • tag标签django-taggit库,不使用默认而使用自定义Tag模型来区分标签的业务意义。用以表示用户定义的、可以多对多关系的分类。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.