当前位置: 首页 > 知识库问答 >
问题:

使用Django使用JSON API数据

郑狐若
2023-03-14

从Django应用程序中,我可以从单独的Restful API中使用数据,但是过滤呢?下面返回所有书籍及其数据。但如果我只想抓取作者、日期等的书怎么办?我想传递一个作者的名称参数,例如.../authors-name或/?author=name,并只返回json响应中的参数。这可能吗?

views.py

def get_books(request):
    response = requests.get('http://localhost:8090/book/list/').json()
    return render(request, 'books.html', {'response':response})

那么有没有办法像模型对象一样进行过滤呢?

共有1个答案

巩光誉
2023-03-14

我能想到三种方法:

  1. 可以使用Python的筛选器,并附加一些代码。
  2. QueryableList,它是我见过的最接近ORM的列表。
  3. 查询筛选器,它采用更实用的方法。

您可以编写一个函数,返回告诉您列表元素是否匹配的函数,并将生成的函数传递到filter中。

def filter_pred_factory(**kwargs):

    def predicate(item):
        for key, value in kwargs.items():

            if key not in item or item[key] != value:
                return False

        return True

    return predicate

def get_books(request):
    books_data = requests.get('http://localhost:8090/book/list/').json()
    pred = filter_pred_factory(**request.GET)
    data_filter = filter(pred, books_data)

    # data_filter is cast to a list as a precaution
    # because it is a filter object,
    # which can only be iterated through once before it's exhausted.
    filtered_data = list(data_filter)
    return render(request, 'books.html', {'books': filtered_data})
from QueryableList import QueryableListDicts

def get_books(request):
    books_data = requests.get('http://localhost:8090/book/list/').json()
    queryable_books = QueryableListDicts(books_data)
    filtered_data = queryable_books.filter(**request.GET)
    return render(request, 'books.html', {'books':filtered_data})
from query_filter import q_filter, q_items

def get_books(request):
    books_data = requests.get('http://localhost:8090/book/list/').json()
    data_filter = q_filter(books_data, q_items(**request.GET))

    # filtered_data is cast to a list as a precaution
    # because q_filter returns a filter object, 
    # which can only be iterated through once before it's exhausted.
    filtered_data = list(data_filter)
    return render(request, 'books.html', {'books': filtered_data})
 类似资料:
  • 问题内容: 我已经在Django中创建了一个不错的数据库,并且希望通过网站内容之外的一些python脚本进行交互,因此我很好奇是否可以在Django之外使用Django数据库API网站,如果有的话,有没有人知道如何实现此目的?Google并没有为此带来很多成功。 问题答案: 在进行任何调用(包括导入模型)之前,你只需要配置Django设置即可。像这样: 同样,请确保在运行之前运行该代码,例如: 然

  • 但请求呢?和是用户的属性,但应将它们发送到endpoint。如果我将资源发送到endpoint,则没有多大意义。 对此有没有办法,遵循JSONAPI并保持API的意义?

  • 问题内容: 在我的视图函数中,我想调用另一个视图并将数据传递给它: ,其中backend是registration.backends对象,而form.cleaned_data是表单数据的字典(但必须同时以 args或* kwargs发送,以防止引发错误)。根据我在文档中找到的内容: 看来我需要提供“ some-view-name”参数,但这仅仅是视图函数的名称还是url的名称?因此,我想使其与在d

  • 上一节我们主要介绍了 Django 中 Form 类的相关属性和方法,本小节中会继续介绍 Field 类的相关属性与方法,最后还有如何实现自定义的 Field。 1. Field 相关基础 1.1 Field 的 clean() 方法 通过上面两个例子演示,我们对 Django 中的表单应该有了初步的了解。对于 Form 类,最重要的就是定义它的字段(Field),且每个字段都有自定义验证逻辑以及

  • jsonapi 是 Django 框架中连接数据交换格式(JSON)API 的开发包。

  • 问题内容: 我在Django中使用以下模型构建了一个问答类型的网站: 我需要显示一个特定的问题及其答案。通常,我需要2个查询才能做到这一点: 我希望使用一个查询来检索所有内容。在MySQL中,它将是: 无论如何,我可以通过Django的ORM做到这一点吗?extra()在这种情况下会有所帮助吗? 问题答案: 这正是select_related()所做的。唯一的问题是必须从Answer模型而不是Qu