标签: tastypie

Django JSON响应错误状态

我的API在出错时返回JSON对象,但状态代码为HTTP 200:

response = JsonResponse({'status': 'false', 'message': message})
return response
Run Code Online (Sandbox Code Playgroud)

如何更改响应代码以指示错误?

python django tastypie

47
推荐指数
4
解决办法
3万
查看次数

没有前端的REST/JSON Web服务的Python框架是什么?

我需要为iOS应用程序创建一个Python REST/JSON Web服务来进行交互.网络上没有前端.

什么是最快,最轻量级的框架用于此?学习曲线的实施还考虑了吗?

从研究中我已经完成了Django-Tastypie或Djanjo-Piston看起来最好的选择,Tastypie获胜因为代码库正在积极维护?

python rest json web-services tastypie

32
推荐指数
3
解决办法
3万
查看次数

Django Tastypie高级过滤:如何使用Q对象进行复杂查找

我有一个基本的Django模型,如:

class Business(models.Model):
    name = models.CharField(max_length=200, unique=True)
    email = models.EmailField()
    phone = models.CharField(max_length=40, blank=True, null=True)
    description = models.TextField(max_length=500)
Run Code Online (Sandbox Code Playgroud)

我需要在上面的模型上执行一个复杂的查询,如:

qset = (
    Q(name__icontains=query) |
    Q(description__icontains=query) |
    Q(email__icontains=query)
    )
results = Business.objects.filter(qset).distinct()
Run Code Online (Sandbox Code Playgroud)

我尝试了以下使用tastypie没有运气:

def build_filters(self, filters=None):
    if filters is None:
        filters = {}
    orm_filters = super(BusinessResource, self).build_filters(filters)

    if('query' in filters):
        query = filters['query']
        print query
        qset = (
                Q(name__icontains=query) |
                Q(description__icontains=query) |
                Q(email__icontains=query)
                )
        results = Business.objects.filter(qset).distinct()
        orm_filters = {'query__icontains': results}

    return orm_filters
Run Code Online (Sandbox Code Playgroud)

在课程Meta for tastypie我有过滤设置为:

filtering = { …
Run Code Online (Sandbox Code Playgroud)

python django tastypie django-q

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

如何将Django Model上的属性(虚拟字段)公开为TastyPie ModelResource中的字段

我有一个Django模型的属性,我想通过TastyPie ModelResource公开.

我的模型是

class UserProfile(models.Model):
    _genderChoices = ((u"M", u"Male"), (u"F", u"Female"))

    user = Models.OneToOneField(User, editable=False)
    gender = models.CharField(max_length=2, choices = _genderChoices)

    def _get_full_name(self):
        return "%s %s" % (self.user.first_name, self.user.last_name)

    fullName = property(_get_full_name)
Run Code Online (Sandbox Code Playgroud)

我的ModelResource是

class UserProfileResource(ModelResource):
    class Meta:
        queryset = models.UserProfile.objects.all()
        authorization = DjangoAuthorization()
        fields = ['gender', 'fullName']
Run Code Online (Sandbox Code Playgroud)

然而,我目前摆脱tastypie api的是:

{
    gender: 'female',
    resource_uri: "/api/v1/userprofile/55/"
}
Run Code Online (Sandbox Code Playgroud)

我尝试过使用ModelResource中的fields属性,但这没有帮助.很想知道这里发生了什么.

python django django-models tastypie

27
推荐指数
1
解决办法
9846
查看次数

在django-tastypie中返回POST数据

我认为对象创建函数返回新创建的对象是标准.

所以,任何想法你如何在tastypie做到这一点?当我发送POST请求时,创建了对象,但我没有得到任何响应.我想要的是接收新创建的对象(或至少PK)的JSON形式.

我尝试重写该dehydrate方法,但它似乎甚至没有调用POST.

有任何想法吗?

django post tastypie

27
推荐指数
1
解决办法
8577
查看次数

'请求标题字段不允许授权'错误 - Tastypie

当我尝试使用AJAX和Tastypie执行HTTP请求时,在为Tastypie资源使用ApiKeyAuthentication时出现以下错误:

XMLHttpRequest cannot load http://domain.com/api/v1/item/?format=json&username=popo&api_key=b83d21e2f8bd4952a53d0ce12a2314c0ffa031b1. Request header field Authorization is not allowed by Access-Control-Allow-Headers.
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题的任何想法?

以下是Chrome的请求标头:

Request Headersview source

Accept:*/*
Accept-Charset:
ISO-8859-1,utf-8;q=0.7,*;q=0.3

Accept-Encoding:gzip,deflate,sdch

Accept-Language:en-US,en;q=0.8

Access-Control-Request-Headers:
origin, authorization, access-control-allow-origin, accept, access-control-allow-headers

Access-Control-Request-Method:
GET
Run Code Online (Sandbox Code Playgroud)

以下是Chrome的响应标头:

Response Headersview source

Access-Control-Allow-Headers:
Origin,Content-Type,Accept,Authorization

Access-Control-Allow-Methods:
POST,GET,OPTIONS,PUT,DELETE

Access-Control-Allow-Origin:*

Connection:keep-alive

Content-Length:0
Content-Type:
text/html; charset=utf-8

Date:Fri, 11 May 2012 21:38:35 GMT

Server:nginx
Run Code Online (Sandbox Code Playgroud)

如您所见,它们都有用于授权的标头,但授权不起作用.

这是我用来编辑响应头的django中间件:https: //gist.github.com/1164697

编辑:我发现了问题.我试图连接到www.domain.com,它只接受domain.com

javascript django backbone.js tastypie

25
推荐指数
2
解决办法
4万
查看次数

使用curl附加多个查询字符串变量

当我尝试在ModelResource中使用authentication = ApiKeyAuthentication()时,我一直收到401响应.我看了Django Tastypie:如何使用API​​ Key进行身份验证,他使用get参数来解决他的问题.如果我尝试使用get参数,它会选择用户名而不是api_key!

这适用于浏览器

http://127.0.0.1:8000/api/v1/spot/8/?username=darren&api_key=9999d318e43b8055ae32d011be5b045ad61dad50
Run Code Online (Sandbox Code Playgroud)

通过终端中的curl发送不会拾取api_key参数

curl --dump-header - http://127.0.0.1:8000/api/v1/spot/8/?username=darren&api_key=9999d318e43b8055ae32d011be5b045ad61dad50
Run Code Online (Sandbox Code Playgroud)

为什么在使用curl并附加2个查询字符串参数时?username=darren&api_key=9999d318e43b8055ae32d011be5b045ad61dad50,它只会拾取第一个参数.这不是正确的方法吗?

django curl tastypie

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

Django的tastypie.默认情况下,以JSON格式输出到浏览器

我看到'对不起,还没有实现.请将"?format = json"附加到您的网址.' 我需要总是附加字符串"?format = json".我可以默认使用JSON输出吗?

此致,Vitaliy

django json tastypie

24
推荐指数
2
解决办法
6633
查看次数

如何使用tastypie登录django

我试图在我的自定义身份验证中覆盖is_authenticated.我有一些简单的(开始)像这样:

class MyAuthentication(BasicAuthentication):
    def __init__(self, *args, **kwargs):
        super(MyAuthentication, self).__init__(*args, **kwargs)

    def is_authenticated(self, request, **kwargs):
        return True
Run Code Online (Sandbox Code Playgroud)

然后在我的ModelResource中

class LoginUserResource(ModelResource):

    class Meta:
        resource_name = 'login'
        queryset = User.objects.all()
        excludes = ['id', 'email', 'password', 'is_staff', 'is_superuser']
        list_allowed_methods = ['post']

        authentication = MyAuthentication()
        authorization = DjangoAuthorization()
Run Code Online (Sandbox Code Playgroud)

我一直收到500错误"error_message": "column username is not unique".我在数据库中只有一个用户名,而我正在尝试进行身份验证.

关于它为什么会返回此错误的任何想法?我如何允许api客户端登录?

谢谢您的帮助.

python django tastypie

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

如何确保我的AJAX请求来自Python中的同一服务器

我已在此处询问有关IP身份验证的问题: 来自同一服务器的TastyPie身份验证

但是,我需要更多的东西!IP地址可能非常容易欺骗.

在此输入图像描述

场景:我的API(TastyPie)和客户端应用程序(在javascript中)位于同一服务器/站点/域上.我的用户没有登录.我想在我的javascript客户端使用我的API.

问:我怎样才能确保我的(认证)AJAX请求来自同一服务器发起

我正在使用Tatypie.我需要验证来自客户端的请求是在同一服务器/域等上进行的.我不能使用"登录会话",因为我的用户没有登录.

我查看了私钥并生成了签名,但他们可以在javascript中查看,使该方法不安全.如果我以某种方式请求服务器的签名形式(在某些python代码中隐藏私钥),任何人都可以向get_signature我的javascript发出相同的http请求,从而打败这一点.

示例获得签名

我还尝试让Django视图将签名放在视图中,从而无需进行get_signature调用.这是安全的,但意味着我现在必须每次刷新页面以获得新的签名.从用户的角度来看,只有第一次调用API才能工作,之后他们需要刷新,再次毫无意义.

使用Django进行签名

我无法相信我是唯一有此要求的人.这是我确定的常见情况.请帮助:)在Tastypie中使用自定义身份验证的示例也会受到欢迎.

谢谢

添加:

python django tastypie

24
推荐指数
3
解决办法
2487
查看次数