【问题标题】:django path is not recognizing its intended viewdjango 路径无法识别其预期视图
【发布时间】:2021-06-10 18:03:55
【问题描述】:

代码:urls.py

path('tools/<int:rate>/', ToolsView.as_view(), name="get-all-tools"),

path('tools/post/', ToolsView.as_view(), name="save-tool"),

代码:views.py

class ToolsView(APIView):
    
    def get(self, request, rate):
        objs = ToolsModel.objects.values_list()[:rate]
        if objs is None:
            return Response(status=status.HTTP_404_NOT_FOUND)
        data = []
        for obj in objs:
            print(obj)
            json = {}
            json['toolid'] = obj[0]
            json['tool_name'] = obj[1]
            json['tool_from'] = obj[2]
            json['tool_qty'] = obj[3]
            json['tool_state'] = obj[4]
            data.append(json)
        return Response(data=data, status=status.HTTP_200_OK)

    def post(self, request):
        data = request.data
        serialize = ToolsSerializer(data=data)
        if serialize.is_valid():
            serialize.save()
            return Response(status=status.HTTP_201_CREATED)
        return Response(status=status.HTTP_404_NOT_FOUND)

每当我调用tools/post/ 意在调用post 方法时

http://127.0.0.1:8000/help/tools/post/

我明白了

get() 缺少 1 个必需的位置参数:'rate'

但是'tools/&lt;int:rate&gt;/'实际上需要rate参数,它调用我的get方法,例如,

http://127.0.0.1:8000/help/tools/5/

在这些方面需要帮助。提前致谢!

【问题讨论】:

    标签: django rest django-rest-framework django-views


    【解决方案1】:

    如果您在浏览器中输入http://127.0.0.1:8000/help/tools/post/,您将在 URL 上执行 GET。在您的 urls.py 中,您将该路由映射到 ToolsView.as_view()。这允许您通过函数处理不同的 HTTP 方法。所以def post 会在请求 POST 时被调用。但是您可能正在执行 GET,它将调用 def get(...) 方法。但是因为您没有传入rate,所以函数参数中缺少它,因此出现错误。要测试 post 方法,您需要对 http://127.0.0.1:8000/help/tools/post/ 执行 POST。

    测试代码:

    import requests
    
    requests.post("http://127.0.0.1:8000/help/tools/post/", data={})
    

    【讨论】:

    • 你能举个例子我怎样才能让它工作吗? django rest 框架,应该让我在请求发布时选择发布数据。
    • “让它工作”是指执行 POST 请求吗?
    • 您使用的是浏览器还是 curl/postman?正如 saquintes 所说,如果您使用没有可浏览 API 的浏览器,您最终只会发出一个 get-request,但如果您通过使用 curl 或 postman 或可浏览 API 指定它是一个后请求,那么当然你的代码应该可以工作。
    • @Thorvald 是的。我正在使用浏览器测试我的 api。谢谢,我明白了你之前在回答中所说的。我应该使用邮递员来测试我的 api。
    猜你喜欢
    • 1970-01-01
    • 2018-05-25
    • 2016-09-11
    • 2015-04-19
    • 2019-07-20
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多