【问题标题】:How to send POST request to Django REST API using python requests如何使用 python 请求将 POST 请求发送到 Django REST API
【发布时间】:2018-10-29 22:52:27
【问题描述】:

我有一个简单的 rest api,我想向使用请求发送一个 post 请求。

我的网址格式是这样的:

url(r'^$', views.ProductList.as_view())

在我看来,我有:

class ProductList(generics.ListAPIView):
    serializer_class = ProductSerializer

    def post(self, request, format=None):
        print('THIS IS A POST REQUEST')
        queryset = [product.name for product in Product.objects.all()]
        return Response(queryset)

我正在尝试使用以下方式发送发布请求:

response = requests.post('http://127.0.0.1:8080/')

但是,这会返回 403,并且不会打印 print 语句。我做了一些研究,我认为这可能与 CSRF 令牌不存在有关,但我不确定如何添加它。有人知道我怎样才能让发布请求工作吗?

我正在使用 python 3.6.3 和 Django 1.10

【问题讨论】:

  • 添加网址。您的端点需要是连接到视图的 url
  • @harshil9968 谢谢。我按照他们所说的添加了,但仍然得到 403
  • 403 也可能意味着视图需要登录用户。你的设置是这样的吗?
  • @BernardParah 抱歉 /products 不应该在那里。我进入了 Rest Framework Permissions 并将其更改为 AllowAny。不确定这是否是最好的方法,但现在可以了

标签: python django post django-rest-framework python-requests


【解决方案1】:

ListAPIView 仅用于列出您的产品,因此禁止 POST 请求。

ListAPIView

用于表示模型实例集合的只读端点。

取自Django Rest Framework documentation

你应该使用 ListCreateAPIView:

class ProductList(generics.ListCreateAPIView):
    """
    List all products or create a product.
    """
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

【讨论】:

  • 我仍然得到 403。如果我使用它,我应该拥有什么权限。我的网站通常不需要任何权限,因此任何允许将发布请求发送到 API 的权限。
  • 您究竟是从哪里发送帖子请求的?你还在用你自定义的post函数吗?你为什么使用queryset = [product.name for product in Product.objects.all()] 来发帖请求?如果您想在后端创建产品,只需使用 ListCreateAPIView 并使用上面的类根据您的序列化程序发送必要的数据。
  • 我使用 python 请求发送 post 请求。我了解您对 queryset 变量的看法,但我仍然对如何使用 ListCreateAPIView 添加到数据库感到困惑
  • 是来自另一台服务器的python请求吗?如果不需要,为什么需要 API。您需要发送包含您的 ProductSerializer 的 json 表示形式的表单数据的发布请求(应该是 ModelSerializer 否则您需要在接收数据时手动创建对象)
  • 现在它全部来自同一台计算机,但是一旦完成,我打算将它放在服务器上,这就是我需要 API 的原因。我正在使用 request.post(the URL, json={data here}) 向它发送一个 post 请求,这个命令只是通过我计算机上的 python shell 运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 2019-12-28
  • 1970-01-01
  • 2020-02-15
  • 2017-10-16
  • 2019-10-19
  • 2021-10-05
相关资源
最近更新 更多