【问题标题】:Parameters URL with DRF routersDRF 路由器的参数 URL
【发布时间】:2020-07-23 14:34:31
【问题描述】:

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

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

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

view.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)

urls.py:

from api import views

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

【问题讨论】:

    标签: django-rest-framework


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的建议,我是创建 API 的新手,所以有很多东西我不知道。
    • 没问题,我们都在学习,但要时刻注意安全;)
    猜你喜欢
    • 1970-01-01
    • 2021-04-16
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    相关资源
    最近更新 更多