一个Django应用程序,用于创建活动、新闻和通知源。
stream-django的Python项目详细描述
Django流
stream django是流的django客户端,它使用python 2.7和3.4、3.5、3.6和3.7支持django从1.5到2.2(包括2.2)。
您可以在https://get stream.io/getu started" rel="nofollow">https://getstream.io/getu started注册流帐户。
注意,还有一个较低级别的python-stream集成库,适用于所有python应用程序。
创建活动流和新闻源
您可以建立:
- 在github上看到的活动流
- Twitter风格的新闻提要
- 像instagram/pinterest这样的feed
- Facebook风格的新闻源
- 通知系统
示例应用程序
您可以查看我们使用此库构建的示例应用程序(只需单击一下即可将它们直接部署到Heroku):
目录
安装
使用pip:
pip安装流django
将stream django添加到已安装的应用程序中
INSTALLED_APPS=[...'stream_django']STREAM_API_KEY='my_api_key'STREAM_API_SECRET='my_api_secret_key'
在getstream.io上使用github登录并添加
stream_api_key
和stream_api_secret
到Django设置模块(您可以在仪表板中找到它们)。
模型集成
stream django可以自动将新活动发布到提要。在您想要的模型上简单地混合activity类o发布。
fromstream_django.activityimportActivityclassTweet(models.Model,Activity):...classLike(models.Model,Activity):...
每次创建tweet时,它都会添加到用户的feed中。跟踪给定用户的用户也会在其订阅源中自动获取新的tweet。
活动字段
模型作为活动存储在feed中。活动至少由以下字段组成:actor,verb,object,time。如果需要,还可以添加更多自定义数据。 活动mixin将尝试自动设置:
对象是对模型实例的引用 actor是对实例的用户属性的引用 动词是类名的字符串表示形式
默认情况下,actor字段将查找名为user或actor的属性和名为created_at的字段以跟踪创建时间。 如果用户字段的调用方式不同,则需要告诉我们在哪里查找它。 下面是一个示例,如果用户字段名为author,则如何设置设置。
classTweet(models.Model,Activity):created_at=models.DateTimeField(auto_now_add=True)author=models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)@propertydefactivity_actor_attr(self):returnself.author
活动额外数据
通常,您需要存储的数据比基本字段还要多。您可以通过在模型中实现额外的活动数据方法来实现这一点。
注意:您应该只返回json.dumps可以处理的数据(也支持datetime实例)。
classTweet(models.Model,Activity):@propertydefextra_activity_data(self):return{'is_retweet':self.is_retweet}
饲料管理器
django stream附带了一个feed_manager类,它有助于所有常见的feed操作。
与feed-manager捆绑的feed
为了让您开始,管理器已经预先配置了4个feed。如果应用程序需要,可以添加更多源。 这三个提要分为三类。
用户反馈:
用户提要存储用户的所有活动。把它想象成你的个人facebook页面。您可以很容易地从管理器获取此源。
fromstream_django.feed_managerimportfeed_managerfeed_manager.get_user_feed(user_id)
新闻源:
新闻提要(或时间线)存储您关注的人的活动。 有一个简单的时间线新闻源(类似于Twitter)和一个聚合版本(类似于Facebook)。
timeline=feed_manager.get_news_feeds(user_id)['timeline']timeline_aggregated=feed_manager.get_news_feeds(user_id)['timeline_aggregated']
通知源:
通知源可用于构建通知功能。
下面我们将展示一个如何阅读通知源的示例。
notification_feed=feed_manager.get_notification_feed(user_id)
默认情况下,通知源将为空。可以指定在创建模型时通知哪些用户。在转发的情况下,您可能希望将父推特通知用户。
classTweet(models.Model,Activity):@propertydefactivity_notify(self):ifself.is_retweetandself.parent_tweet.author!=self.author:target_feed=feed_manager.get_notification_feed(self.parent_tweet.author_id)return[target_feed]
另一个例子是跟踪用户。您通常希望通知正在跟踪的用户。
classFollow(models.Model,Activity):@propertydefactivity_notify(self):return[feed_manager.get_notification_feed(self.target_user.id)]
跟随进刀
要创建新闻源,您需要通知系统以下关系。管理器带有api,允许用户的新闻提要跟随另一个用户的提要。此代码允许当前用户的时间线和时间线聚合的源跟踪目标用户的个人源。
INSTALLED_APPS=[...'stream_django']STREAM_API_KEY='my_api_key'STREAM_API_SECRET='my_api_secret_key'0
显示新闻源
活性富集当您从订阅源读取数据时,类似的活动将如下所示:
INSTALLED_APPS=[...'stream_django']STREAM_API_KEY='my_api_key'STREAM_API_SECRET='my_api_secret_key'1
这远远不能在模板中使用。我们调用从数据库扩展加载引用的过程。示例如下:
INSTALLED_APPS=[...'stream_django']STREAM_API_KEY='my_api_key'STREAM_API_SECRET='my_api_secret_key'2
模板化
既然已经丰富了活动,就可以呈现模板了。 为了方便起见,我们提供了"渲染活动模板"标记:
INSTALLED_APPS=[...'stream_django']STREAM_API_KEY='my_api_key'STREAM_API_SECRET='my_api_secret_key'3
render_activity template标记将呈现模板activity/[aggregated]/[verb].html,活动作为上下文。
例如activity/tweet.html将用于呈现带有动词tweet的正常活动
INSTALLED_APPS=[...'stream_django']STREAM_API_KEY='my_api_key'STREAM_API_SECRET='my_api_secret_key'4
以及activity/aggregated/like.html,用于包含动词like的聚合活动
αα-α15如果需要为同一活动支持不同类型的模板,可以发送第三个参数来更改模板选择。
下面的示例将使用模板activity/[聚合]/homepage_u%(verb)s.html
INSTALLED_APPS=[...'stream_django']STREAM_API_KEY='my_api_key'STREAM_API_SECRET='my_api_secret_key'6
设置
流式API键 流站点API密钥。默认值
流式API机密 流站点API密钥机密。默认值
流位置
客户端将连接到的位置API终结点。例如:stream_location='us-east'
流超时
API客户端的连接超时(秒)。默认值6.0
流式提要管理器类
指向提要管理器类的路径。默认值'stream\u django.managers.feedmanager'
流式用户馈送
存储活动的源的名称(在getstream.io dasboard中配置)。默认值'user'
流式新闻源
新闻源的名称(在getstream.io dasboard中配置),其中存储来自后续源的活动。默认值{'timeline':'timeline','timeline'u aggregated':'timeline'u aggregated'}
流式通知源
存储活动通知的源的名称(在getstream.io dasboard中配置)。默认'notification'
流禁用模型跟踪
禁用活动模型的自动跟踪。默认值false
暂时禁用信号
在模式/数据迁移运行、syncdb和fixture加载期间(以及在django测试运行期间),模型同步被禁用。
您可以通过stream\u disable\u model\u tracking
django设置完全禁用feed发布。
自定义丰富功能
有时候你会想定制丰富的工作方式。文档将向您显示几个常见选项。
丰富额外字段
如果将对模型实例的引用存储在"活动附加数据"中,则可以使用enrich类为您处理它
INSTALLED_APPS=[...'stream_django']STREAM_API_KEY='my_api_key'STREAM_API_SECRET='my_api_secret_key'7
更改检索模型的方式
包附带的enrich类试图最小化数据库查询的数量。模型按类分组,然后在查询中用pk_u检索。您可以实现一种不同的方法来检索模型子类的实例,该模型子类属于stream\u django.enrich.enrich
类。
要更改每个模型的检索,您应该覆盖fetch_model_instances
方法;或者,您可以通过实现hook函数fetch lt;model_name>;_instances来更改如何检索某些模型
INSTALLED_APPS=[...'stream_django']STREAM_API_KEY='my_api_key'STREAM_API_SECRET='my_api_secret_key'8
预加载相关数据
您通常会访问相关对象,如activity['object'].user。为了防止新闻提要运行n个查询,可以指示管理器加载相关对象。经理将使用django的select_相关功能。(https://docs.djangoproject.com/en/dev/ref/models/querysets/select related)。
INSTALLED_APPS=[...'stream_django']STREAM_API_KEY='my_api_key'STREAM_API_SECRET='my_api_secret_key'9
完整文档和低级API访问
需要时,您还可以直接使用低级python api。文档可在流式网站
fromstream_django.activityimportActivityclassTweet(models.Model,Activity):...classLike(models.Model,Activity):...0
版权和许可信息
版权所有(c)2014-2017 stream.io inc和个人贡献者。保留所有权利。
有关此软件的历史记录、使用条款和条件以及所有保证的免责声明,请参阅"许可证"文件。