django 实现 消息通知- 不使用第三方包
定义模型
class Message(models.Model):
user = models.ForeignKey(UserModel, on_delete=models.DO_NOTHING, verbose_name="用户关联信息")
name = models.CharField("标题", max_length=100)
title = models.TextField("内容", max_length=1000, null=True, blank=True)
to_users = models.ManyToManyField(User, blank=True, verbose_name='接受人', help_text="接受人")
safe = models.BooleanField("状态(已读/未读)", default=False)
Creation_time = models.DateTimeField("记录创建时间", auto_now_add=True)
class Meta:
db_table = "Message"
verbose_name = "消息"
verbose_name_plural = verbose_name
注册后台
@admin.register(Message)
class MessageAdmin(admin.ModelAdmin):
pass
定义序列化器
class MessageListCreateSerializers(serializers.ModelSerializer):
class Meta:
model = Message
fields = '__all__'
class MessageUpdateSerializers(serializers.ModelSerializer):
safe = serializers.BooleanField(help_text="状态(已读/未读)")
class Meta:
model = Message
fields = ("safe",)
书写视图集
class MessageModelsViewSet(ModelViewSet):
"""消息信息管理"""
queryset = Message.objects.all()
serializer_class = MessageListCreateSerializers
pagination_class = BasePagination
filter_backends = [DjangoFilterBackend]
filter_fields = ('name', 'safe')
def get_serializer_class(self):
# 根据请求类型动态变更serializer
if self.action == 'update':
return MessageUpdateSerializers
return MessageListCreateSerializers
注册路由
routers.register("Message", MessageModelsViewSet, basename="消息信息管理")