gpt4 book ai didi

python - 从 Django Rest Framework api 中提取特定数据字段

转载 作者:行者123 更新时间:2023-12-01 09:23:35 24 4
gpt4 key购买 nike

我最近完成了 Django Rest Framework api 教程,但很难具体理解它如何用作我计划开发的应用程序的后端(这是我第一次尝试后端开发)。更简单地说,我不明白前端的查询是如何工作的。使用浏览器或 httpie 浏览 api 是有意义的,但我不知道前端如何从模型中提取指定的数据。

例如,假设我有以下内容:

模型

class Snippet(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=True, default='')
code = models.TextField()
linenos = models.BooleanField(default=False)
language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100)
style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)
highlighted = models.TextField()

序列化器

class SnippetSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Snippet
fields = ('id', 'title', 'code', 'linenos', 'language', 'style', 'url', 'highlight')

观看次数

class SnippetViewSet(viewsets.ModelViewSet):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer

如果我是应用程序另一端的用户,我将如何查询代码片段模型内的“语言”?我如何访问“语言”中的任何信息,前端需要以什么方式与我的 api 交互才能获取此信息?

我的问题不一定是如何构建 api,而是如何与其交互。非常感谢任何帮助。

(Django 2.0、Python 3.5)

最佳答案

好的,非常感谢 Mark Winterbottom 为 Django Rest 框架发布的 Udemy 类(class)。我将继续将其留在这里,供其他那些努力理解 Django Rest 框架中的一些基本思想的人使用。

JSON 数据是通过您的 api 确定的前端点击 URL 来提取的。因此,这变成了“如何实现 url 中的某些搜索功能?”的问题。

Django 使用模型、 View 、 Controller 模式。模型是与数据库交互的东西,允许您从中提取数据,而无需了解如何使用实际的 SQL 代码进行查询(使用称为对象关系映射或 ORM 的东西来执行此操作,并且您的模型位于模型中。 py 文件)。 Controller ,您如何与拉取的数据进行交互以在 api 中创建/读取/更新/删除内容保存在views.py中(有点违反直觉,因为 View 就是您在模板文件夹中拥有的内容[HTML页面]等等])。

您可以在 Controller (views.py) 中实现称为过滤器的功能,以允许您通过特定信息进行搜索以获取 ?search=whateveryouresearching url,方法是包含以下内容:

从rest_framework导入过滤器

并将其添加到您要搜索的 ViewSet 中:

filter_backends = (filters.SearchFilter,) #allows for search functionality
search_fields = ('name','email') #which can be any Field in your viewset

过滤器创建的这个 ?search=whateveryouresearching 是某些前端设备访问特定搜索信息的方式(例如“语言”内的特定用户输入链接英语或普通话)。

关于python - 从 Django Rest Framework api 中提取特定数据字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50624345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com