我正在使用 Django Rest 框架和 PostgreSQL,构建一个返回本 NBA 赛季所有统计数据的 API。不是有一个函数来返回每个类别的统计信息,例如:
@api_view(['GET'])
def sortByRebounds(request):
"""Returns all stats in the database sorted by rebounds per game"""
string = Nba_stats.objects.values_list('name', 'team', 'rpg').order_by('rpg').reverse()
return Response(string)
是否可以有一个函数能够根据用户在 url 中键入的内容来过滤和返回数据?
例如一个名为| 的函数||接受一个类别作为参数和一个 url
sortBy
,用户可以在其中输入
"api/sortby/<str:category>/"
并接收有关篮板的数据,或
"api/sortby/rebounds"
并接收有关助攻的所有数据。
"api/sortby/assists"
and receive everything on assists.
是的,可以使用单个函数根据 URL 查询参数过滤和返回数据。
以下是使用 Django REST framework 和 PostgreSQL 实现此功能的方法:
views.py
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import Nba_stats
@api_view(['GET'])
def sort_by(request):
"""
按给定类别返回所有统计数据,并按降序排序。
"""
category = request.query_params.get('category')
if not category:
return Response({"error": "缺少 'category' 查询参数"}, status=400)
valid_categories = ['rpg', 'apg', 'ppg', 'etc'] # 添加拥有的有效类别
if category not in valid_categories:
return Response({"error": f"'{category}' 不是有效的类别。 有效的类别是:{', '.join(valid_categories)}"}, status=400)
stats = Nba_stats.objects.values_list('name', 'team', category).order_by(f'-{category}')
return Response(stats)
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('api/sortby/', views.sort_by, name='sort_by'),
]
在此代码中:
-
我们创建了一个名为
sort_by
的单一视图函数。 -
我们使用
request.query_params.get('category')
从 URL 查询参数中提取category
。 - 我们检查是否提供了类别,如果没有,则返回错误。
-
我们根据
category
参数动态构造排序字段 (f'-{category}'
),以按降序排序。 -
我们使用提供的类别从
Nba_stats
模型中检索数据。 - 最后,我们以 JSON 形式返回排序后的统计数据。
现在,可以使用以下 URL 访问此 API:
-
获取按篮板排序的数据:
/api/sortby/?category=rpg
-
获取按助攻排序的数据:
/api/sortby/?category=apg
-
获取按得分排序的数据:
/api/sortby/?category=ppg
通过调整有效类别列表,可以根据数据库中的可用统计数据自定义此功能。 这提供了使用单个函数过滤不同类别的一个灵活且可扩展的解决方案。
标签:python,rest,django-rest-framework From: 76447170