2013-09-23 2 views
2

Я не могу заставить это работать на жизнь меня.django tastypie 401 Несанкционированный

У меня есть это в api.py

class catResource(ModelResource): 
    class Meta: 
     queryset = categories.objects.all() 
     resource_name = 'categories' 
    allowed_methods = ['get', 'post', 'put'] 
    authentication = Authentication() 

Так что, когда я пытаюсь:

curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"name":"Test", "parent": "0", "sort": "1","username":"admin","password":"password"}' http://192.168.1.109:8000/api/v1/categories/ 

я получаю:

HTTP/1.0 401 UNAUTHORIZED 
Date: Sat, 21 Sep 2013 10:26:00 GMT 
Server: WSGIServer/0.1 Python/2.6.5 
Content-Type: text/html; charset=utf-8 

Модель:

class categories(models.Model): 
    name = models.CharField(max_length=255) 
    parent = models.ForeignKey('self', blank=True,null=True) 
    sort = models.IntegerField(default=0) 


    def __unicode__(self): 
     if self.parent: 
      prefix = str(self.parent) 
     else: 
      return self.name 
     return ' > '.join((prefix,self.name)) 

    @classmethod 
    def re_sort(cls): 
     cats = sorted([ (x.__unicode__(),x) for x in cls.objects.all() ]) 
     for i in range(len(cats)): 
      full_name,cat = cats[i] 
      cat.sort = i 
      super(categories,cat).save() 
    def save(self, *args, **kwargs): 
     super(categories, self).save(*args, **kwargs) 
     self.re_sort() 

    class Admin: 
     pass 
+0

Ну, в [документации] (http://django-tastypie.readthedocs.org/en/latest/tutorial.html) говорится, что вам нужна какая-то аутентификация для запросов POST ... (смотрите «401») –

+0

'allowed_methods' и' authentication' должны находиться внутри 'Meta'. –

+0

Аренте они внутри мета? – R0b0tn1k

ответ

6

Получите ваши отступы вправо (как было сказано в комментариях), но вам также необходимо изменить авторизацию. По умолчанию Tastypie использует ReadOnlyAuthorization, который не позволит вам POST.

https://django-tastypie.readthedocs.org/en/latest/authorization.html

class catResource(ModelResource): 
    class Meta: 
     queryset = categories.objects.all() 
     resource_name = 'categories' 
     allowed_methods = ['get', 'post', 'put'] 
     authentication = Authentication() 
     authorization = Authorization() # THIS IS IMPORTANT 
1

Спасибо, что работали

class WordResource(ModelResource): 
    class Meta: 
     queryset = Word.objects.all() 
     resource_name = 'word' 
     allowed_methods = ['get', 'post', 'put'] 
     authentication = Authentication() 
     authorization = Authorization() 

моя модель была как этот

class Word(models.Model): 
    word = models.CharField(max_length=50,unique=True) 
    meaning = models.TextField(max_length=150) 
    phrase = models.TextField(max_length=150) 
    sentence = models.TextField(max_length=150) 
    image_url = models.TextField(max_length=2000) 

    def __str__(self): 
     return self.word 

И не забывайте

from tastypie.authorization import Authorization 
from tastypie.authentication import Authentication 
Смежные вопросы