django 实现 消息通知- 不使用第三方包

定义模型

  1. class Message(models.Model):
  2. user = models.ForeignKey(UserModel, on_delete=models.DO_NOTHING, verbose_name="用户关联信息")
  3. name = models.CharField("标题", max_length=100)
  4. title = models.TextField("内容", max_length=1000, null=True, blank=True)
  5. to_users = models.ManyToManyField(User, blank=True, verbose_name='接受人', help_text="接受人")
  6. safe = models.BooleanField("状态(已读/未读)", default=False)
  7. Creation_time = models.DateTimeField("记录创建时间", auto_now_add=True)
  8. class Meta:
  9. db_table = "Message"
  10. verbose_name = "消息"
  11. verbose_name_plural = verbose_name

注册后台

  1. @admin.register(Message)
  2. class MessageAdmin(admin.ModelAdmin):
  3. pass

定义序列化器

  1. class MessageListCreateSerializers(serializers.ModelSerializer):
  2. class Meta:
  3. model = Message
  4. fields = '__all__'
  5. class MessageUpdateSerializers(serializers.ModelSerializer):
  6. safe = serializers.BooleanField(help_text="状态(已读/未读)")
  7. class Meta:
  8. model = Message
  9. fields = ("safe",)

书写视图集

  1. class MessageModelsViewSet(ModelViewSet):
  2. """消息信息管理"""
  3. queryset = Message.objects.all()
  4. serializer_class = MessageListCreateSerializers
  5. pagination_class = BasePagination
  6. filter_backends = [DjangoFilterBackend]
  7. filter_fields = ('name', 'safe')
  8. def get_serializer_class(self):
  9. # 根据请求类型动态变更serializer
  10. if self.action == 'update':
  11. return MessageUpdateSerializers
  12. return MessageListCreateSerializers

注册路由

  1. routers.register("Message", MessageModelsViewSet, basename="消息信息管理")