python - Django Rest Framework 中的 API 查询

标签 python django django-rest-framework

我已经从数据库创建了一个 API,我可以查看该 API,但无法通过 URL 进行查询,例如:127.0.0.1:8000/author?author_id=9,我是不知道在哪里添加查询代码。我想使用字段进行过滤。这是我的 models.py

class AuthorAPI(models.Model):
    author_id=models.IntegerField()
    name=models.TextField()
    author_img_url=models.TextField()
    title=models.TextField()
    first_published_at=models.DateTimeField()
    excerpt=models.TextField()

    class Meta:
        db_table = 'view_author'

序列化器.py

from rest_framework import serializers
from .models import SortAPI, AuthorAPI
class AuthorAPISerializer(serializers.ModelSerializer):
    class Meta:
        model=AuthorAPI
        fields='__all__'

views.py

from .serializers import APISerializer,AuthorAPISerializer
from .models import SortAPI, AuthorAPI
from rest_framework.response import Response
from rest_framework.decorators import api_view
@api_view(['GET'])
def getauthor(request):
    if request.method == 'GET':
        results = AuthorAPI.objects.all()
        serialize = AuthorAPISerializer(results, many=True)
        return Response(serialize.data)

最佳答案

在您的 View 中,使用ModelViewset

并添加fliter_backend属性:

filter_backends = [django_filters.rest_framework.DjangoFilterBackend]

请参阅文档:

https://www.django-rest-framework.org/api-guide/filtering/#setting-filter-backends

class AuthorViewset(viewsets.ReadOnlyModelViewset):
    serializer_class = AuthorAPISerializer
    queryset = AuthorAPI.objects.all()
    filter_backends = [django_filters.rest_framework.DjangoFilterBackend]

重要

使用django_filter将需要您安装额外的要求,但这是非常值得的,请在此处查看django_filter的安装步骤:

https://django-filter.readthedocs.io/en/stable/guide/install.html

在您的 urls.py 中,您需要使用 SimpleRouter 注册您的查看器,如此处文档中所述:

https://www.django-rest-framework.org/api-guide/viewsets/#example

此外,您还需要设置 filterset_fields 来告诉 DRF 您希望允许用户使用哪些字段进行过滤。

如文档中所述:

https://django-filter.readthedocs.io/en/stable/guide/rest_framework.html#using-the-filterset-fields-shortcut

重要的警告词可能在文档中没有得到足够的强调,这一点是:

Note that using filterset_fields and filterset_class together is not supported.

完成后,如果您浏览到/author,您应该会看到一些可用的过滤器控件,等等

关于python - Django Rest Framework 中的 API 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74320031/

相关文章:

python - 如何在 Pandas 中按小时分组并检查每小时的数据?

python - 使用 django-subdomains 包的 Django 子域

python - 选择基于数据库值 Django 检查哪个单选按钮

python - Django View 链接/重定向最佳实践

django - 如何在 Django Rest Framework 的自定义字段中传递额外的关键字参数?

python - Python中带括号和不带括号的调用方法

python - 处理 Sprite 与静态的有角度的矩形障碍物的碰撞

python - Django Rest Framework - 如何使用 update_or_create

django - 在 Django 中过滤 jsonfield 的字典列表

python - Django Rest Framework ViewSet 不按字段过滤