簡體   English   中英

Django Rest 框架 Api 查看 GET

[英]Django Rest Framework Api View GET

在我的代碼中,我有一個 model 推文,在 tweet_list_view 中,我想將推文列表顯示為 API 視圖。

@api_view(['GET'])
def tweet_list_view(request, *args, **kwargs):
    qs = Tweet.objects.all().order_by('-date_posted')
    serializer = TweetSerializer(data=qs, many=True)
    return Response(serializer.data)

這就是我得到的結果。

AssertionError at /tweets/
When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
You should either call `.is_valid()` first, or access `.initial_data` instead.

所以我調用了 .is_valid 方法,如下所示:

@api_view(['GET'])
def tweet_list_view(request, *args, **kwargs):
    qs = Tweet.objects.all().order_by('-date_posted')
    serializer = TweetSerializer(data=qs, many=True)
    if serializer.is_valid():
        return Response(serializer.data, status=201)
    return Response({}, status=400)

然后我得到:

TemplateDoesNotExist at /tweets/
rest_framework/api.html

在serializers.py class TweetSerializer(serializers.ModelSerializer): class Meta: model = Tweet 字段, 'post'

模型.py

class Tweet(models.Model):
    content = models.TextField(blank=True, null=True)
    image = models.FileField(upload_to='images/', blank=True, null=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
    date_posted = models.DateTimeField(default=timezone.now)
    likes = models.IntegerField(default=0)

    def __str__(self):
        return self.content

    class Meta:
        ordering = ['-date_posted']

它正在尋找一個模板,但它應該使用默認的 Django 模板。 有沒有辦法解決這個問題?

更新:

忘記了 api_view 前面的@。 添加它。 還添加了 renderer_class (jsonrenderer) 以確保避免錯誤。


僅當您有 post、put 或 patch 視圖時,才需要使用序列化程序的 data 屬性。 在您的情況下,只需在沒有數據屬性的情況下嘗試它,它應該沒問題

from rest_framework.renderers import JSONRenderer

@api_view(['GET'])
@renderer_classes([JSONRenderer]) 
def tweet_list_view(request, *args, **kwargs): 
    qs = Tweet.objects.all().order_by('-date_posted') 
    serializer = TweetSerializer(qs, many=True)
    return Response(serializer.data)

這里可以在官方django rest框架文檔的教程示例中看到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM