Python 如何使用django rest框架在后端突出显示文章的某一部分

Python 如何使用django rest框架在后端突出显示文章的某一部分,python,django-rest-framework,highlight,Python,Django Rest Framework,Highlight,这就是我如何创作我的文章 `类CreateArticleView(ListCreateAPIView): """ 类处理项目的创建 “”“ ` 这就是我查看一篇文章的方式,因此我想获取一篇文章,并能够突出文章的几个部分,并设法对其进行评论 class GetUpdateDeleteArticle(RetrieveUpdateDestroyAPIView): permission_classes = (IsAuthenticated,) renderer_classes = (ArticleJSO

这就是我如何创作我的文章

`类CreateArticleView(ListCreateAPIView): """ 类处理项目的创建 “”“

`

这就是我查看一篇文章的方式,因此我想获取一篇文章,并能够突出文章的几个部分,并设法对其进行评论

class GetUpdateDeleteArticle(RetrieveUpdateDestroyAPIView):
permission_classes = (IsAuthenticated,)
renderer_classes = (ArticleJSONRenderer,)
queryset = Article.objects.all()
serializer_class = ArticleSerializer
lookup_field = 'slug'

@staticmethod
def validate_author(request, article):
    if request.user.pk != article.author_id:
        message = error_messages['unauthorised']
        return Response(message, status.HTTP_403_FORBIDDEN)

def get(self, request, *args, **kwargs):
    """
    :param request: user requests to get an article
    :param kwargs: slug field is passed in the url
    :return: data and response if article exists
    """

    try:
        article = Article.objects.get(slug=kwargs['slug'])
    except Article.DoesNotExist:
        message = error_messages['article_404']
        return Response(message, status=status.HTTP_404_NOT_FOUND)

    serializer = ArticleSerializer(
        instance=article, context={'request': request})
    return Response(serializer.data, status=status.HTTP_200_OK)

这更多的是模型级的设计决策,而不是API问题。我将采用以下DB设计:

模型突出显示,用于存储对文章的引用、文本突出显示部分的起始索引和结束索引。大概是这样的:

class Highlight(models.Model):
    article = models.ForeignKey(Article, related_name='highlights')
    start = models.PositiveIntegerField()
    end = models.PositiveIntegerField()
然后是评论模型。一种常见的设计是使用注释,以便可以将注释用于应用程序中的任何模型。这样的东西应该足够了:

class Comment(TimeStampedModel):
    text = models.TextField(blank=False)
    author = models.ForeignKey(User, related_name='comments')
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

现在,您可以围绕此设计构建一个API,其中客户端通过发送突出显示文本的文章id、开始和结束索引来创建突出显示。也可以使用突出显示的id创建评论。检索文章的突出显示也应该相当容易实现。

感谢它帮助了您的想法。@sylvia不客气。另外,如果你同意的话,那么别忘了接受答案如果我在文章的正文中有一个链接,可能是一个图片,那么在突出显示时有没有跳过它的方法it@sylvia现在有点复杂了。根据所使用的标记语言,您可以使用一些库(如Beauty soup或其他库)将所有额外的实体从主文本中分离出来。但实施起来会很复杂
class Comment(TimeStampedModel):
    text = models.TextField(blank=False)
    author = models.ForeignKey(User, related_name='comments')
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')