Django REST Framework实现按CID过滤的单用户查询API端点
Django DRF 实现按CID查询单用户接口
你现有代码结构已经满足基础要求,不需要改动已有的全量查询逻辑,三步就能加好目标端点:
1. 编写单条查询视图
根据你现有视图的编码风格二选一即可:
如果你用类视图(DRF通用视图,推荐)
在views.py中新增详情视图,指定用CID作为查询匹配字段(DRF默认用主键pk匹配,这里手动覆盖即可):
from rest_framework import generics from rest_framework import status from rest_framework.response import Response # 替换成你项目里的实际导入路径 from .models import HomeController from .serializers import HCSerializer class CIDUserDetailView(generics.RetrieveAPIView): queryset = HomeController.objects.all() serializer_class = HCSerializer lookup_field = 'CID' # 核心:指定匹配字段为CID
注意:请确保
HomeController模型里的CID字段加了unique=True约束,否则查询时可能触发多结果异常。如果之前没加,改完模型字段后执行python manage.py makemigrations、python manage.py migrate同步数据库结构即可。
如果你用函数视图
和你现有手写视图逻辑保持一致的写法:
from rest_framework.decorators import api_view from rest_framework import status from rest_framework.response import Response from .models import HomeController from .serializers import HCSerializer @api_view(['GET']) def cid_user_detail(request, CID): try: target_user = HomeController.objects.get(CID=CID) except HomeController.DoesNotExist: return Response({"msg": "对应CID的用户不存在"}, status=status.HTTP_404_NOT_FOUND) ser = HCSerializer(target_user) return Response(ser.data)
如果你之前全量接口用的是ModelViewSet,连新视图都不用写,只要在原有ViewSet类里加一行lookup_field = 'CID',路由注册后会自动生成单条查询的详情接口。
2. 配置路由
在你挂载API前缀的路由文件(一般是app下的urls.py或者根路由urls.py)里新增路径,完全匹配你要的/api/<int:CID>格式:
from django.urls import path from . import views urlpatterns = [ # 你原有的全量查询路由保留,比如 path('api/', views.UserListView.as_view()), # 类视图对应路由 path('api/<int:CID>/', views.CIDUserDetailView.as_view()), # 函数视图就用下面这行替换上面的路由 # path('api/<int:CID>/', views.cid_user_detail), ]
3. 接口验证
启动服务后直接发起GET请求访问对应地址,比如查询CID为123的用户就访问/api/123/,接口会仅返回该CID匹配的单个用户序列化数据,CID无匹配时自动返回404状态码。
内容的提问来源于stack exchange,提问作者Filippo Genoni
相关产品推荐
相关产品推荐

