标签: tastypie

如何检查已经从tastypie验证的用户?

当用户在Django中进行身份验证时,如何从tastypie中检查?

用户登录后,视图中包含一些从API中提取数据的JS,后者由tastypie支持.

我在我的资源上设置了基本身份验证/ djangoauthorisation,因此浏览器会弹出http auth窗口.有什么方法可以避免这种情况吗?

到目前为止,我的想法是扩展BasicAuthentication,以便它首先检查会话数据,当它找不到它时,它会回退到http auth?AFAIK AJAX调用包括会话cookie,所以这在理论上应该有效吗?有没有人做过类似的事情?

django ajax tastypie

12
推荐指数
2
解决办法
4391
查看次数

Tastypie APIKey身份验证

Tastypie APIKey身份验证如何工作?我知道文档中提到了一个信号:

from django.contrib.auth.models import User    
from django.db import models  
from tastypie.models import create_api_key 

models.signals.post_save.connect(create_api_key, sender=User)
Run Code Online (Sandbox Code Playgroud)

但是,什么时候被称为?如果我想向用户提供他们的API密钥,我知道我可以在APIKey数据库中找到这个create_api_key函数添加密钥,但是在何时何地调用此models.signals.post_save函数?

这只是另一款django型号吗?我觉得是这样的?

每次保存用户帐户时都会调用此命令吗?

django api-key tastypie

12
推荐指数
1
解决办法
6570
查看次数

Django&TastyPie:request.POST为空

我正在尝试使用curl进行POST:

curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"item_id": "1"}' http://www.mylocal.com:8000/api/1/bookmarks/
Run Code Online (Sandbox Code Playgroud)

但是,request.POST始终为空.

下面是我的ModelResource代码:

class BookmarkResource(ModelResource):


    class Meta:
        queryset = Bookmark.objects.all()    
        resource_name = 'bookmarks'
        fields = ['id', 'tags']
        allowed_methods = ['get', 'post', 'delete', 'put']
        always_return_data = True
        authorization= Authorization()
        include_resource_uri = False

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

    def obj_create(self, bundle, **kwargs):

        request = bundle.request

        try:
            payload = simplejson.loads(request.POST.keys()[0])
        except:
            payload = simplejson.loads(request.POST.keys())
Run Code Online (Sandbox Code Playgroud)

谁知道我错过了什么?

提前致谢.

django tastypie

12
推荐指数
1
解决办法
1万
查看次数

将django-allauth与tastypie一起使用的正确方法是什么?

我正在编写一个Django应用程序,它使用django-allauth进行Facebook集成,并使用django-tastypie作为iOS应用程序的后端.iOS应用程序将使用原生Facebook iOS SDK.除了网站之外,我还希望能够从iOS应用程序中注册并验证Facebook和非Facebook用户.

问题是django-allauth似乎没有可以从外部访问的API.插入allauth功能的唯一简洁方法似乎是通过Django模板标签.有没有办法可以公开这个功能与tastypie一起使用?

Django-allauth都是开源的,所以我试图解析代码.我最初的想法是使用本机Facebook SDK对iOS端的用户进行身份验证,然后手动填写SocialAccount,SocialToken的信息,并将SocialAccount添加到SocialApp(这些都是django-allauth模型).然而,这似乎是一个非常糟糕的解决方案.我喜欢通过Facebook ID或类似方式干净地创建所有模型的方法.

更新:GitHub上 有一些关于这个问题的讨论.基本上,还没有内置功能.我打算制定一个只处理Facebook的自定义解决方案(因为这就是我在我的应用程序中使用的所有内容).如果有效,我会发布我之后在这里做的.

python django tastypie facebook-ios-sdk django-allauth

12
推荐指数
1
解决办法
1173
查看次数

RESTful服务参数必须是可发现的吗?

序言:我对REST的理解充其量是浅薄的,因此欢迎对我的问题进行任何更正或澄清.

我有一种情况,我需要RESTful服务的用户提交任意真正的正数.因此,我假设我不应该在url中要求它,即使返回的对象应该是相同的,并且应该使用参数(或者这个假设是错误的?).

鉴于此,为了符合REST,参数必须以某种方式被发现吗?我无法找到任何能让我清楚的事情.

如果没有,我进一步假设参数需要以其他方式记录,从而锁定(当前api的一部分),据我所知,这是不可取的,因为资源应该通过跟随超文本链接找到比硬编码位置(和这种情况下的参数).

假设参数必须是可发现的,有没有办法在tastypie/django中这样做?

django parameters rest discoverability tastypie

11
推荐指数
1
解决办法
506
查看次数

如何访问tastypie自定义身份验证中的POST数据

我正在尝试在tastypie中编写自定义身份验证.基本上,我想使用post参数进行身份验证,我根本不想使用django auth,所以我的代码看起来像:

class MyAuthentication(Authentication):
   def is_authenticated(self, request, **kwargs):
       if request.method == 'POST':
           token = request.POST['token']
           key = request.POST['key']
           return is_key_valid(token,key)
Run Code Online (Sandbox Code Playgroud)

这或多或少都是这个想法.问题是我不断收到以下错误:

"error_message": "You cannot access body after reading from request's data stream"
Run Code Online (Sandbox Code Playgroud)

我知道这与我正在访问POST的事实有关,但我无法确定是否有办法解决它.有任何想法吗?谢谢.

编辑:也许我忘了提到最重要的事情.我正在使用github中找到的技巧处理表单数据.我的资源来自多部分资源

class MultipartResource(object):
    def deserialize(self, request, data, format=None):
        if not format:
            format = request.META.get('CONTENT_TYPE', 'application/json')

        if format == 'application/x-www-form-urlencoded':
            return request.POST

        if format.startswith('multipart'):
            data = request.POST.copy()
            data.update(request.FILES)
            return data
        return super(MultipartResource, self).deserialize(request, data, format)
Run Code Online (Sandbox Code Playgroud)

django tastypie

11
推荐指数
2
解决办法
9577
查看次数

Django和iOS中的CSRF令牌

所以我想知道在这里做什么...我正在从iOS调用我的Django服务器,并且我一直收到403错误(无效的CSRF令牌).我正在考虑实现一个函数,它将返回令牌(您需要登录才能访问该函数),然后将令牌添加到我的POST调用中.

现在......我不明白这样做有什么意义?如果我使用TastyPie并且所需的登录名是APIKey ...我应该免除csrf检查吗?

为了确保我理解正确...是每个用户会话生成的CSRF吗?因此,如果我不使用Cookie,CSRF是不是必要的?

人们通常如何在iOS上使用他们的Django服务器并进行此类POST调用?

谢谢!

django django-csrf ios tastypie ios6

11
推荐指数
2
解决办法
3717
查看次数

用Tastypie公开模型方法

我目前正致力于在我的Django项目中实现API,而Tastypie似乎最适合.

我似乎无法解决的是如何使用Tastypie在我的模型中公开一个函数.

例如,我有这个模型:

class game(models.Model):
    id = models.AutoField("ID", primary_key=True, editable=False)
    ip_address = models.OneToOneField(IPAddress, verbose_name="IP Address")
    port = models.CharField("Port", max_length=5)
    name = models.CharField("Game Name", max_length=100)
    ram = models.IntegerField("RAM (mb)", max_length=10)
    node = models.ForeignKey(node)
    user = models.ForeignKey(User)
    config = models.ForeignKey(Config)
    mysqlserver = models.ForeignKey(MySQLserver)
    mysqlenabled = models.BooleanField("MySQL Created?")
    suspended = models.BooleanField("Suspended")
Run Code Online (Sandbox Code Playgroud)

在这个模型中,我有这样的功能:

def start(self):
    config = Config.objects.get(pk=self.config.id)
    cmds = config.startcmds
    game = config.gametype
    parsedcmds = self.replace_variables(cmds)

    client = phPanel.jelly.jelly.zmqclient(self.ip_address.address)
    data = {'user':self.generate_username(), 'method':'start_server', 'id':self.id, 'memory':self.ram, 'ip':self.ip_address.address,
            'port':self.port, 'startcmds':parsedcmds, 'game':game}

    result = client.send(data)
    return …
Run Code Online (Sandbox Code Playgroud)

python django tastypie

11
推荐指数
1
解决办法
2883
查看次数

Django Tastypie创建具有外键的新资源?

我正在尝试使用Tastypie工作创建新实例,但我不断使用外键获得此错误.这是我的东西:

楷模:

class SuggestionVote(models.Model):
    created_by_user = models.ForeignKey(User)
    date_created = models.DateTimeField(auto_now_add = True)
    suggestion = models.ForeignKey(Suggestion)

class Suggestion(models.Model):
    title = models.TextField(blank=True,null=True)
    created_by_user = models.ForeignKey(User)
    date_created = models.DateTimeField(auto_now_add = True)
    votes = models.IntegerField(default=0)    

    def __unicode__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)

模型资源(我使用自己的身份验证方法):

class UserResource(ModelResource):
    class Meta:
        list_allowed_methods = ['get']
        queryset = User.objects.all()
        resource_name = 'user'
        authentication = MyBasicAuthentication()
        authorization = DjangoAuthorization()
class SuggestionResource(ModelResource):
    class Meta:
        list_allowed_methods = ['get']
        queryset = Suggestion.objects.all()
        resource_name = 'suggestion'
        authentication = MyBasicAuthentication()
        authorization = DjangoAuthorization()

class SuggestionVoteResource(ModelResource):
    class Meta:
        list_allowed_methods = …
Run Code Online (Sandbox Code Playgroud)

django tastypie

10
推荐指数
1
解决办法
6976
查看次数

Tastypie是否有辅助函数来生成API密钥?

我想要做的是每当用户请求API密钥时 - 无论用户是否已生成一个 - 系统将生成一个全新的密钥.

我知道每当调用时ApiKey.objects.create()都会为没有生成的用户生成一个API密钥.但是,如果用户确实有一个,则尝试调用该.create()方法会引发错误.

在这种情况下,我认为最好编写自己的密钥生成器.但是,我现在希望这里的某个人可能知道一个帮助函数,它允许我生成一个随机的API密钥,然后让我自己手动将它保存到数据库中.

有人可能知道任何这样的帮手功能吗?

django tastypie

10
推荐指数
3
解决办法
4035
查看次数