简化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
-执行请求(默认情况下仅适用于change
和delete
突变)
管道中的第一个链接是从石墨烯获取数据,其他链接则从上一个链接获取数据。
您可以通过在设置中设置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.params
或self.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
自定义验证器
您可以通过重写内部的baseauthenticator
和authenticate
方法以及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