声明图api django应用程序

ribbon-graph的Python项目详细描述


#Ribbongraph
Declarative Graph API django应用程序

Ribbongraph是一个django应用程序,它为
neo4j数据库提供声明性权限层。它非常适合构建社交网络应用程序。

ribbongraph的理念是,客户端应用程序应该可以对图形数据库执行任何
它们希望执行的操作,但只有在允许它们执行***操作的情况下才可以执行这些操作。



>;好的想法是,RibbonGraph将社交网络中所有潜在的非常复杂的逻辑打包成一个整洁的小包装。

>;为什么创建RibbonGraph?

>;我创建这个包是因为我厌倦了复杂的端点,并希望找到更好的方法来构建我的应用程序,[hungrosity](https://itunes.apple.com/us/app/hungrosity/id917006014)。


《用户指南》
——
Ribbongraph将允许您将所有API端点简化为几个。下面的例子演示了Ribbongraph的强大功能。这里我们使用django rest framework的apiew类创建一个nodeview。

class nodeview(apieview):
authentication\u classes=(tokenauthentication,)
permission\u classes=(isauthenticated,)

def get(self,request,node\u type=none,id=none):
"
返回一个json ob表示根在节点
的图形节点树的对象,其标识符为"id",或者如果未指定"id",则表示根在满足查询约束的
节点上的树的列表。
"
user=request.user
api=graphapi(settings.neo4j_url,models=model_list)
query_dict=get_query_dict_from_params(request.query_params)
如果id:
id=int(id)
response_data=api.request_subgraph_at_node(user.id,query_dict.get('include',none),id)
否则:
response_data=api.query_for_subgraphs(user.id,query_dict,node_type)
return response(response_data)

不需要复杂的API,也不需要成批处理请求。

例如,当用户登录时,您可以请求用户的所有信息,以及其所有朋友的信息,甚至其朋友的朋友的信息。请求的粒度已降低到字段级别。

让我们看看该请求的外观:

https://my-app.com/nodes/23432?include=名字,姓氏,好友。include(名字,姓氏),收到的好友请求。include(发件人,收件人)

最重要的是,我们可以非常容易地添加或删除字段。这使得调试和开发速度大大加快。

我们可以创建一个类似的post端点,允许客户端在图中创建节点。在这种情况下,更新在请求正文中被指定为json。

def post(self、request、node-type):
"
"应用根在创建的节点上的树更新。
"
"user=request.user
api=graphapi(settings.neo4j-url,models=model-list)
create-dict=request.data
response_data=api.update_subgraph_at_node(user.id,'create',create_dict,node_type=node_type)
返回response(response_data)

更新的语法与get请求的语法非常相似,有一些小的差异。以下是发送好友请求的方式。





{
"sender":{
"attach":{
"id":23432
}
},
"receiver":{
"attach":{
"id":83472
}
},
"receiver嫒u has嫒u seen":false
}

我们想创建一个friendrequest类型的对象,并将其附加到两个用户,发送者和接收者。


但是,您可能已经注意到丢失了一些内容。这就是权限。

permissions
——


权限定义了图形。Ribbongraph的原理是,客户应该能够对他们想要的共享图进行任何更改,但只允许对其进行更改*。

Ribbongraph允许您声明性地指定客户是什么样的,不允许对图进行什么操作。这可以是任何事情,从确保所有"friendrequest"都有一个"receiver\u seen"字段,到确保只有"friendrequest"的接收者才能在自己和发送者之间建立友谊。

f assert_允许添加边缘(self、graph、actor_id、node_id、id_to_add、tx):
"


actor是请求的接收者。

f发送给发件人的朋友。

"
user_id=user.get_user_id(graph,node_id,tx)
user_id_to_add=user.get_user_id(graph,id_to_add,tx)

如果actor_id==user_id_to_add:
如果不是user,user_sent_friend_request_to_user(graph,user_id,actor_id,tx):
raise permissiondenied()
return

如果actor_id==user_id:
如果不是user.user_向用户发送了好友请求(图,user_id_to_add,actor_id,tx):
raise permissiondenied()
return


raise permissiondenied()

当且仅当用户"b"向用户"a"发送了好友请求时,emself才会显示给用户"b"的好友列表。

就像我们有一个社交网络一样。



Requirements
----
从现在起,此应用程序将与[django rest framework]一起使用(http://www.django-rest-framework.org),并且它将基类apiexception用于所有Graphapier错误。

Quick ST艺术
——


1。运行

pip install ribbon graph
2。将"功能区"添加到已安装的应用程序设置中,如下所示:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
swing Java JScrollBar设计   java如何按名称显示输出   java如何将多个ArrayList连接成一个?   java存储SSLSocketFactory为静态字段   java获得了奇怪的csv文件时间输出   java类在JSP中没有该属性   java ehcache程序未运行   java如何对数组的所有元素应用或操作?   sqlite如何用Java编写adb shell命令   java泛型中的动态数据类型   javajaxrs@Path阻止加载静态资源   java如何在安卓中从主字符串中获取特定字符串?   java与FLAG_LAYOUT_NO_LIMITS相反   关于OpenJDK 11和OpenJFX 11(&Proguard)的java迁移问题   eclipse设置Selenium for Java(创建Firefox驱动程序所需的JAR和导入)   java如何将空字符串更新为oracle Clob   对象为什么在Java中同时重写equals()和hashCode()?   java从另一个类获取变量的正确方法