简化django和graphene工作的框架

django-graphene-framework的Python项目详细描述


简介

DGF是使用django和graphene简化写入过程的框架。

免责声明

这个包是为个人项目创建的,因此它可能缺少您需要的一般功能,或者具有您不需要的不必要功能。如果您发现其中任何一个问题,请随时在github上留下问题

安装

可以在PYPI上找到该包

'pip install django graphene framework'

依赖关系

此软件包要求您安装石墨烯django。如果使用pip安装,则会自动安装依赖项

pip安装graphene django

基本知识

DGF允许您通过GraphQL轻松访问模型。

假设我们有一个模型

# models.pyfromdjango.db.modelsimportModel,CharFieldclassProfile(Model):first_name=CharField(max_lenght=20)last_name=CharField(max_lenght=20)

通过创建模式,我们可以轻松地将其转换为graphql可访问模型

# schema.pyfromDGFimportSchemafrom.modelsimportProfileclassProfileSchema(Schema):classMeta:model=Profile

我们在meta类中指定信息。模型字段确定哪个模型是的架构。

在那之后,我们必须注册这个模式,这样它就可以被转换为信息图示器的模式

我们创建一个合并器并注册模式

# schema.pyfromDGFimportSchema,Combinerfrom.modelsimportProfileclassProfileSchema(Schema):classMeta:model=Profilecombiner=Combiner()combiner.register(ProfileSchema)schema=combiner.to_schema()

模式可以像任何其他石墨烯模式一样使用。

<强>!!!!到现在为止,dgf还没有graphql的内置端点!!!!

请求

模式将为模型生成查询和添加、更改和删除变异。

筛选参数的格式为(小写)字段的名称。排除关系字段。

值参数的格式为(小写)<;字段名称>;。 自动字段被排除。可以使用ID提供关系。

返回值的格式为(小写)<;字段名称>;

查询

查询的名称将是模型的名称查询。它返回有关足够条目的选定数据。

{
  ProfileQuery(_id: 1) {
    id
    first_name
    last_name
  }
}

# Will get information about every profile with id = 1

突变

变异的名称将是<;模型的名称{add,change,delete},具体取决于要使用的变异类型。

添加变异可以获取新数据库条目的值参数。它返回有关添加项的选定数据。

mutation {
  ProfileAdd(first_name: "Tom") {
    id
    first_name
  }
}

# Will add new profile with first_name = "Tom" and return it's id and first_name

更改对于更改的数据库条目,变异可以获取值参数,对于要更改的条目,变异可以获取筛选参数。它返回有关更改条目的选定数据。

mutation {
    ProfileChange(_first_name:"Tom", last_name:"Smith"){
        first_name
        last_name
    }
}

# Will change last_name to "Smith" of every profile with name "Tom" and then return first_name and last_name of these profiles.

删除变异可以得到要删除的条目的过滤参数。它返回已删除条目的ID(将在以后的版本中返回选定的数据)。

mutation {
    ProfileDelete(_last_name:"Smith")
}

# Will delete every entry with last_name = "Smith" and return the ids of these entries.
# Note the lack of {}

自定义请求处理

您可以通过覆盖允许的请求来指定哪些请求是可能的

fromDGFimportSchema,QUERY,ADDfrom.modelsimportProfileallowed_requests=[QUERY,ADD]classProfileSchema(Schema):classMeta:model=Profile

您可以通过在模式的meta类中添加fields字段来指定应该访问哪些字段。

# schema.pyfromDGFimportSchemafrom.modelsimportProfileclassProfileSchema(Schema):classMeta:model=Profilefields=['first_name','id']

如果未定义字段,则将添加所有字段。

您还可以将自己的字段添加到架构中。

# models.pyfromdjango.db.modelsimportModel,CharFieldclassProfile(Model):first_name=CharField(max_lenght=20)last_name=CharField(max_lenght=20)
0

如果未定义字段,则将添加所有自定义字段。自定义字段将覆盖具有相同名称的模型中的字段。

自定义请求逻辑

自定义字段必须由自定义请求逻辑处理。要添加自定义请求逻辑,可以重写架构中的方法。

方法接受参数:

  • 模式-此方法引用的模式
  • 模型-此方法引用的模型
  • 数据-来自链中上一个链接的数据(有关更多信息,请阅读管道
  • 原始数据-原始的、未处理的请求
  • params-附加数据(如schema模型原始数据类型和由管道模块添加的自定义数据)

获取

fetch方法从数据库中获取数据。fetch方法的名称采用fetch{query,add,change,delete}格式。fetch应该返回模型/模型列表。

执行

获取功能对提供的数据执行请求。execute方法的名称采用execute{query、add、change、delete}格式。execute应该返回与请求类型相同的类型(请参见查询和变异)。

管道

DGF有内置的管道,让您可以自定义每一步的行为。默认管道由以下部分组成:

  • authlink-尝试使用authenticatos根据提供的凭据对用户进行身份验证
  • requestPermissionLink-检查用户是否有权提出此请求
  • fetchlink-从数据库中获取有关模型的数据
  • objectpermissionlink-根据用户拥有的权限筛选数据
  • executeLink-执行请求(默认情况下仅适用于changedelete突变)

管道中的第一个链接是从石墨烯获取数据,其他链接则从上一个链接获取数据。

您可以通过在设置中设置dgf_pipeline来更改管道。

# models.pyfromdjango.db.modelsimportModel,CharFieldclassProfile(Model):first_name=CharField(max_lenght=20)last_name=CharField(max_lenght=20)
1

验证链接

添加新的paramuser来表示经过身份验证的用户(使用与django相同的模型)。身份验证是使用身份验证程序完成的。如果无法对用户进行身份验证,请将user设置为anonymoususer

请求权限链接

使用权限来检查用户是否要使用此请求。如果没有,则抛出未经授权的

获取链接

对架构调用fetch方法(请参见fetch。

对象权限链接

使用权限来筛选数据。

执行链接

调用架构上的execute方法(请参见execute)

自定义链接

您可以通过重写内部的baselink类和process方法来创建自己的链接。

# models.pyfromdjango.db.modelsimportModel,CharFieldclassProfile(Model):first_name=CharField(max_lenght=20)last_name=CharField(max_lenght=20)
2

您可以使用self.paramsself.context

认证

验证器

身份验证器允许您在不编写自定义后端的情况下对用户进行身份验证。身份验证的参数可以在正文或标题中。默认情况下,使用模型验证器。

模型验证器

模型验证器用于使用用户名和密码对用户进行身份验证。它使用django的默认后端。

后端验证器

使用现有后端的身份验证器基类。您需要使用身份验证所需的所有参数的名称来定义args字段,它将调用django的authenticate来尝试对用户进行身份验证

# models.pyfromdjango.db.modelsimportModel,CharFieldclassProfile(Model):first_name=CharField(max_lenght=20)last_name=CharField(max_lenght=20)
3

承载验证器

身份验证器的基类,该用户是承载令牌。您需要覆盖authenticate\u令牌方法,该方法应返回用户。

# models.pyfromdjango.db.modelsimportModel,CharFieldclassProfile(Model):first_name=CharField(max_lenght=20)last_name=CharField(max_lenght=20)
4

自定义验证器

您可以通过重写内部的baseauthenticatorauthenticate方法以及args字段来编写自定义身份验证器。

# models.pyfromdjango.db.modelsimportModel,CharFieldclassProfile(Model):first_name=CharField(max_lenght=20)last_name=CharField(max_lenght=20)
5 < H2> Perm票据

权限允许您限制用户IM请求条款和特定条目。

您可以通过覆盖权限字段为每个架构设置权限。

# models.pyfromdjango.db.modelsimportModel,CharFieldclassProfile(Model):first_name=CharField(max_lenght=20)last_name=CharField(max_lenght=20)
6

只读权限

只允许查询请求。

自定义权限

通过重写basepermissions类以及重写一个或多个方法,您可以编写自己的权限:

  • 具有对象权限-对于对象权限链接
  • 具有请求权限-对于请求权限链接

两种方法都可以接受模式模型数据参数

# models.pyfromdjango.db.modelsimportModel,CharFieldclassProfile(Model):first_name=CharField(max_lenght=20)last_name=CharField(max_lenght=20)
7

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

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像