【问题标题】:Using Curl and Django Rest Framework in Terminal在终端中使用 Curl 和 Django Rest 框架
【发布时间】:2016-12-18 23:27:13
【问题描述】:

我有模特

class Item(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    otheritemmodel = models.ForeignKey(Model, on_delete=models.CASCADE)
    uuid = models.CharField(max_length=256, unique=True)
    floatitem = models.FloatField()
    relateditem = models.ForeignKey(RelatedItem, on_delete=models.CASCADE)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    subcategory = models.ForeignKey(SubCategory, on_delete=models.CASCADE)
    character = models.CharField(max_length=500, null=True, blank=True)
    zipcode = models.IntegerField()
    city = models.CharField(max_length=100)
    state = models.CharField(max_length=100)
    active = models.BooleanField(default=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)

创建API视图

class Item_Create_APIView(CreateAPIView):
    authentication_classes = [SessionAuthentication, BasicAuthentication, JSONWebTokenAuthentication]
    permission_classes = [IsAuthenticated]
    serializer_class = ItemCreateSerializer
    queryset = Item.objects.all()

和序列化器

Create Serializer

我正在尝试在终端中通过 curl 或 http 测试 createView 帖子,但到目前为止还没有运气。我正在使用 python3.5 和 Django==1.8.10 以及带有 JWT 令牌身份验证的 Django Rest Framework。我可以登录并获取令牌,但我不知道如何将 json 数据格式化为 baseusrl/create_item 端点以通过 curl 测试 Create Post 调用以查看 API 是否有效。

有人对此有指导吗?谢谢

我试过了,还是不行:

curl —X POST H ”Authorization: JWT token” http://localhost:8000/create_item/ ‘{“key”:”val”}’ 

我已经尝试过这种格式,并且在调用时得到“未指定 url”

curl -X POST -H "Authorization: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE0NzEwMjc4MjIsImVtYWlsIjoicGF0b3JlQHByb3Rvbm1haWwuY2giLCJ1c2VybmFtZSI6InBhdG9yZUBwcm90b25tYWlsLmNoIn0.seO6ayMayJ8hwGf3Tlqwu95cZOw5VyFGVqsT5LymdJw" -H "Content-Type: application/json" -d “user=37&otheritmemodel=3&uuid=4454353454983543434&floatitem=40.0&relateditem=28&category=1&subcategory=1&character=jim&zipcode=11111&city=City&state=State” http://localhost:8000/user-api/create_item/

有什么想法吗?

【问题讨论】:

  • 你得到什么回应?
  • 'curl: (6) 无法解析主机:-X curl: (6) 无法解析主机:POST 301 Moved Permanently head>

    301 永久移动


    nginx
    curl: (6 ) 无法解析主机:“授权

标签: python django curl terminal django-rest-framework


【解决方案1】:

经过深思熟虑,我喝了双倍的咖啡,并找到了使用 JWT 身份验证实现 POST 调用的正确方法。有一个警告,我必须在受保护的 url 周围加上单引号,才能成功进行 POST,并将记录持久保存到数据库中。我还选择不将 JSON 格式的数据作为键值对传递,因为 JSON 渲染器会处理它。

对于遇到相同问题的其他人,有效的语法是:

curl -H "Authorization: JWT YourToken" -d "field=value&field=value" 'http://127.0.0.1:8000/protected_url'

【讨论】:

  • 但是如何获得第一个JWT Token,意思是如何通过用户名和密码获取token。我在找这个,这是curl -d "username=admin&password=secret" -X POST 'http://localhost:8000/api/token/'
【解决方案2】:

您是否尝试过官方文档中指定的格式:

curl -X GET http://127.0.0.1:8000/api/example/ -H 'Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b'

【讨论】:

  • 我登录,并获得然后新的令牌试过格式,并获得“凭证未提供”卷曲-X GET 127.0.0.1:8000/user-api/create_item -H“授权:令牌eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InBhdG9yZUBwcm90b25tYWlsLmNoIiwidXNlcl9pZCI6MSwiZXhwIjoxNDcwOTc2MTMyLCJlbWFpbCI6InBhdG9yZUBwcm90b25tYWlsLmNoIn0.rIbezfMm_PGOAxk-lD6o_XvISe_uKr7VWGMiqjRqvms” {” detail":"未提供身份验证凭据。"}
猜你喜欢
  • 2021-09-11
  • 2015-03-25
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
相关资源
最近更新 更多