1

我是 django-tastypie 的新手。这是我的 api.py 代码,

from tastypie.resources import ModelResource
from .models import ListModel


class ListModelResource(ModelResource):

    def determine_format(self, request):
        return 'application/json'

    class Meta:
        allowed_methods = ['get','put']
        queryset = ListModel.objects.all()

在这里,我使用 CURL 进行 GET:

curl http://127.0.0.1:8000/api/v1/listmodel/1/

OUT: {"completed": false, "id": 1, "resource_uri": "/api/v1/listmodel/1/", "title": "This is test"}

在这里,我使用 CURL 进行 PUT:

 curl --dump-header - -H "Content-Type: application/json" '{"completed": false, "id": 1, "resource_uri": "/api/v1/listmodel/1/", "title": "This is test"}' http://127.0.0.1:8000/api/v1/listmodel/1/
HTTP/1.0 401 UNAUTHORIZED
Date: Wed, 04 Sep 2013 08:12:53 GMT
Server: WSGIServer/0.1 Python/2.7.2+
Content-Type: text/html; charset=utf-8

为什么我得到 401 ?

4

1 回答 1

2

根据美味派教程

...如果您尝试向资源发送 POST/PUT/DELETE,您会发现自己收到“401 Unauthorized”错误。为了安全起见,Tastypie 将授权类(“你可以做什么”)设置为 ReadOnlyAuthorization。这使得在网络上公开变得安全,但阻止我们执行 POST/PUT/DELETE。..

您可以使用以下方法启用它tastypie.authorization.Authorization

from tastypie.authorization import Authorization
from tastypie.resources import ModelResource
from .models import ListModel

class ListModelResource(ModelResource):
    def determine_format(self, request):
        return 'application/json'

    class Meta:
        allowed_methods = ['get','put']
        queryset = ListModel.objects.all()
        authorization= Authorization() # <---

警告

这现在非常适合在开发中进行测试,但非常不安全。你不应该把这样的资源放在互联网上。请花一些时间查看Tastypie 中可用的身份验证/授权类。

于 2013-09-04T08:39:02.923 回答