首页 > 解决方案 > DRF 路由器的参数 URL

问题描述

我正在使用 Django Rest Framework 来创建 API。在这个项目中,我想在 URL 中捕获参数。例如我想捕获用户的用户名和密码,我的想法是这样的:

http://localhost:8000/accounts/login/?unsername=username&password=password

但我不能,我使用路由器和 django-filter,但我无法获取参数 url。我的项目文件在那里:

视图.py:

class AccountsData(viewsets.ModelViewSet):
    queryset = models.UserData.objects.all()
    serializer_class = serializers.AccountsDataSerializer
    permission_classes = (IsAuthenticated,)
    filter_backends = (filters.DjangoFilterBackend,)
    filterset_fields = ['username', 'password']

    lookup_url_kwarg = 'username'

    @action(methods=['get'], detail=True, url_name='login', url_path='login')
    def login(self, request, pk=None):
        return Response({"Login successfully"}, 200)

网址.py:

from api import views

router = routers.SimpleRouter()
router.register(r'accounts', views.AccountsData)

标签: django-rest-framework

解决方案


请求查询参数与路由无关,它们随请求一起传递,与您如何配置路由无关。request.query_params例如,您可以访问它们,request.query_params.get('username')将获取username参数的值。

话虽如此,您的想法有一个严重的错误:密码或任何类型的机密数据都不应该进入查询参数,您应该使用在其正文中携带数据的 http 动词(例如 POST)。


推荐阅读