我已经构建了一个简单的Django照片应用程序.用户可以上传照片,关注其他用户和照片.为了处理用户之间的关系(跟随和取消关注),我使用了一个名为django-relations by coleifer的软件包.这是一个很棒的包,使用起来非常简单.
一切都按预期工作.我目前有一个工作活动Feed.
我将Feed分为两部分:跟随(我关注的用户的所有活动)和你(发生在我身上的所有活动).我在我的iOS应用程序下面发布了两张图片,它使用我的Django照片应用程序,因为它是后端:
我想要做的是添加聚合到以下Feed.正如你所看到的,用户alexperri喜欢5次射击.我想将所有这些项目合并为一行.我不需要为"你"提要添加聚合,因为我希望看到每个单独的操作都发生在我身上.但是对于以下Feed,添加聚合是有意义的.有几个应用程序可以很好地进行聚合.Fashionlista,Pinterest和Instagram做得很好.这是一个来自Instagram的例子来展示我想要实现的目标:
在上面的示例中,您可以看到以下Feed,而lovetoronto喜欢5张照片.我开始在播放后使用Instagram来查看它是如何工作的.Instagram关注源显示最多35个活动条目,每个条目最多可包含该活动类型的5个活动."lovetoronto喜欢5张照片"是一个活动条目,它显示了他喜欢的最新5张照片.由于lovetoronto进行了最新的动作,他处于领先地位.
我想实现相同的设置.
这是我目前的模型设置:
models.py
from django.db import models
from django.contrib.auth.models import User
class Photographer(models.Model):
user = models.OneToOneField(User, primary_key=True
likes = models.ManyToManyField('Photo', through = 'Likes',
related_name = 'likedby', blank = True)
class Photo(models.Model):
photographer = models.ForeignKey(Photographer, related_name = 'shot_owner')
created = models.DateTimeField(auto_now_add=True)
url = models.CharField(max_length=128)
class Likes(models.Model):
liked_at = models.DateTimeField(auto_now_add=True, blank=True, null=True)
photographer = models.ForeignKey(Photographer, related_name = 'liked_by')
photo = models.ForeignKey(Photo, null=True)
class Activity(models.Model):
actor = models.ForeignKey(Photographer, related_name = 'actor')
receiver = models.ForeignKey(Photographer, related_name …
Run Code Online (Sandbox Code Playgroud) 如何在Postman中进行以下基于令牌的身份验证调用?
curl -H "Authorization: ApiKey dan:ab104c54c6d06fa5bc17e38059c1b814ee9c3b43" -F "image=/path_to_photo/image.jpg" http://localhost:8000/api/photo/ -v
Run Code Online (Sandbox Code Playgroud)
这不起作用:
这是curl
通话的输出:
dan@dan-iMac:~/app$ curl -H "Authorization: ApiKey dan:ab104c54c6d06fa5bc17e38059c1b814ee9c3b43" -F "image=/path_to_photo/image.jpg" http://localhost:8000/api/photo/ -v
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8000 (#0)
> POST /api/photo/ HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:8000
> Accept: */*
> Authorization: ApiKey dan:ab104c54c6d06fa5bc17e38059c1b814ee9c3b43
> Content-Length: 164
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=------------------------bbe8b5cf6a427342
>
* Done waiting for 100-continue
* HTTP 1.0, assume …
Run Code Online (Sandbox Code Playgroud) 我还是tastypie的新手,但它看起来像一个非常整洁的图书馆.不幸的是,我遇到了一些困难.
我有两个模型,以及与这些模型相关的两个资源:
class Container(models.Model):
pass
class ContainerItem(models.Model):
blog = models.ForeignKey('Container', related_name='items')
# For testing purposes only
class ContainerResource(ModelResource):
class Meta:
queryset = Container.objects.all()
authorization = Authorization()
class ContainerItemResource(ModelResource):
class Meta:
queryset = ContainerItem.objects.all()
authorization = Authorization()
Run Code Online (Sandbox Code Playgroud)
我Container
通过jQuery 创建了一个对象:
var data = JSON.stringify({});
$.ajax({
url: 'http://localhost:8000/api/v1/container/',
type: 'POST',
contentType: 'application/json',
data: data,
dataType: 'json',
processData: false
});
Run Code Online (Sandbox Code Playgroud)
但是,当我去创建一个时ContainerItem
,我收到此错误:
container_id may not be NULL
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:当存在ForeignKey关系时,如何创建新资源?
所以我们目前有一个使用Django创建的网站.现在,我们想创建一个使用相同后端的原生iOS应用程序,因此我们不必重新编写整个代码.根据我的理解,有两种替代路线:
1)直接调用Django URL,然后调用一个函数.在该函数中,使用编码的JSON数据创建HTTPResponse并将其发回.
2)从Django服务器创建一个类似于Tastypie的REST服务.但是,除了对对象进行直接的GET调用之外,我没有看到我们如何在TastyPie的Django模型中调用自定义函数.我们甚至可以这样做吗?
我发现令人惊讶的是,没有很多关于使用现有后端(如Django或RoR)从iOS使用Web服务的信息.例如,我知道Instagram使用Django,但他们如何从iOS与他们的服务器进行通信?!
非常感谢!
我有一个关于过滤tastypie的简单问题.
我想过滤多个值.例如:
/api/v1/message/?accountId=1,5,12
这不起作用.知道我怎么能这样做吗?
我需要使用高级过滤吗?如果是,我该如何创建这样的过滤器?一个简单的puesdo代码的简单例子将是伟大的!
谢谢!
我开始工作AngularJS
和DataTables
,不知是否可以定制响应DataTables
期待.DataTables插件的当前预期是这样的:
{
"draw": 1,
"recordsTotal": 57,
"recordsFiltered": 5,
"data": [...]
}
Run Code Online (Sandbox Code Playgroud)
在服务器端,API正在处理 django-tastypie
服务器的响应是:
{
meta: {
limit: 20,
next: null,
offset: 0,
previous: null,
total_count: 2
},
objects: [...]
}
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法调整Datatables插件来接受/映射这个响应,或者我必须找到一种方法来向api添加预期的字段?
到目前为止我已经这样做了:
var deptTable = angular.element('#deptManagementTable').DataTable({
processing: true,
serverSide: true,
pagingType: "simple_numbers",
ajax: {
url: "/client/api/v1/departments/",
data: function(d) {
d.limit = d.length;
d.offset = d.start;
d.dept_name__icontains = d.search.value;
},
dataSrc: function(json) {
for (var i=0, len=json.objects.length ; i<len ; i++) {
json.objects[i].DT_RowId = …
Run Code Online (Sandbox Code Playgroud) 我试图将Django项目从1.8版带到1.11版.除了单元测试之外,几乎所有东西看起来都很好.我们有一个基础测试类继承自Django TestCase和Tastypie mixin.基类在setUp()中有一些代码
class BaseApiTest(ResourceTestCaseMixin, django.test.TestCase):
def setUp(self):
super().setUp()
self.username = "secret_user"
self.password = "sekret"
self.email = "secret@mail.com"
self.first_name = "FirstName"
self.last_name = "LastName"
self.user = User.objects.create_superuser(
self.username,
self.username,
self.password
)
Run Code Online (Sandbox Code Playgroud)
应用程序特定的测试将继承基本测试并执行类似的操作
class TheAPITest(BaseApiTest):
def setUp(self):
super().setUp()
# more setup goes here
Run Code Online (Sandbox Code Playgroud)
所以,在Django 1.8.x下,这很好用.但是在1.11.x下,所有这些都给我一个错误User.objects.create_superuser() line
.
django.db.utils.InterfaceError: connection already closed
我一直在阅读发行说明,但是在1.8和1.11之间发生了太多的事情.我缺少一些简单的东西吗?
我正在使用TastyPie制作内部API.我有
from tastypie.authentication import ApiKeyAuthentication
class MyResource(ModelResource):
Meta:
authentication = ApiKeyAuthentication()
Run Code Online (Sandbox Code Playgroud)
禁用Auth规则后,我的API运行良好.有了它,无论我尝试什么,我都会收到401(未经授权)的回复.
我确信这是一旦你看到它在行动中非常明显的事情之一,但在此期间,请告知如何提出请求(GET).
我正在使用require.js来帮助组织我的Backbone.js应用程序.
我正在试图找出使用与require.js不兼容的第三方javascript库的正确方法
问题中的库是backbone-tastypie.js.基本上,库所做的是monkeypatch Backbone的一些原型方法,以便为TastyPie Django REST框架提供更简单的支持.它通过直接操作全局命名空间中的Backbone对象来实现.
但是,由于我使用Backbone.js作为require.js模块,因此当该库尝试访问它时它不可用.
如何在Backbone范围内导入此主干 - tastypie?
我正在尝试使用auto-doc工具为tastypie REST API生成API文档.我尝试过Tastytool,但似乎没有显示api的结果参数,而是模型的列.然后我尝试Sphinx似乎更有前途,因为Tastypie支持Sphinx,但我找不到一个示例来显示在代码中为API放置注释的位置和方式,并将它们生成到文档中.
任何人都可以分享一些有关正确撰写评论的信息或示例,并为基于Tastypie的API生成Sphinx文档?谢谢.