对django rest框架强制执行客户端视图集要求
django-rest-secureview的Python项目详细描述
[![PYPI版本](https://badge.fury.io/py/django rest secureview.svg)(https://badge.fury.io/py/django rest secureview)
[![构建状态](https://travis-ci.org/fmitra/django-rest-secureview.svg?branch=master)](https://travis ci.org/fmitra/django rest secureview)
目前,它的重点是在post params中强制执行特定的模型键,或者要求用户与他们正在访问的模型具有外键关系。
要求
1。python 2或python 3
2.django
3.django rest框架
安装包
`pip install django rest secureview`
2。从django\u rest\u secureview导入decorators和viewset规则
`` python
。decorators导入需要从django\u rest\u secureview导入
。view\u规则导入参数
```
3。decorate viewsets
`` python
来自rest_framework。viewsets导入modelviewset
来自django_rest_secureview。decorators导入需要从django_rest_secureview导入modelviewset。view_规则导入参数
类apiendpoint(modelviewset):
@require(params,params=['dog','cat'])
def create(self,request):
pass
```
\viewRules
viewRules包含正在实施的API条件背后的逻辑。使用“require”装饰符至少需要一个viewrule。这个包中的默认viewrules都希望有特定的关键字参数来补充它们。如果需要其他功能,可以创建自己的viewrule(如下所述)
1。` params`:要求在requests中提交特定的post params
*kwargs:`params` list
*usage:`@require(params,params=['animal','name'])`
2。` owner`:要求经过身份验证的用户在详细的endpint
*kwargs:`model`django model
*usage:`@require(owner,model=pet)`
*注意:这只在使用默认的'pk'属性的详细端点中有效
3。` owner params`:组合“params”和“owner”条件
*kwargs:`model`django model,`params` list
*usage:`@require(owner,model=pet,params=['animal'])`
*注意:这只在使用默认“pk”属性的详细端点中有效
decorators
1。` require`:接受一个viewrule,它详细描述了api条件和任意数量的关键字值。有关详细信息,请参考viewrule文档。
`` python
期望在post请求中提供animal和name参数
@require(params,params=['animal',name'])
def create(self,请求:
pass
params
@需要所有者(ownerparams,model=pet,params=['name','color'])
def update(self,request,pk=none):
pass
````
为了方便起见,django rest框架中的http状态代码在类的“status”属性中可用,请求对象中的参数在类的“request”属性中可用。
如果不满足特定条件,则所有viewrules都应具有返回json可序列化响应的“enforce”方法。如果不满足条件,则视图集将传递此响应,而不是使用在视图集的操作方法中。
更多状态码:[rest framework状态码](http://www.django-rest-framework.org/api-guide/status-codes/)
`` python
来自django-rest-secureview.view-u-rules-import-viewrule
类mycondition(viewrule):
def-enforce(self,params=none):
self.response(data=notice,status=code)
````
\testing
[tox](https://tox.testrun.org)应该在虚拟环境中运行测试。其他依赖项,如django rest框架,将单独打包到tox的虚拟测试环境中。
`` sh
./运行测试.sh
```
[![构建状态](https://travis-ci.org/fmitra/django-rest-secureview.svg?branch=master)](https://travis ci.org/fmitra/django rest secureview)
目前,它的重点是在post params中强制执行特定的模型键,或者要求用户与他们正在访问的模型具有外键关系。
要求
1。python 2或python 3
2.django
3.django rest框架
安装包
`pip install django rest secureview`
2。从django\u rest\u secureview导入decorators和viewset规则
`` python
。decorators导入需要从django\u rest\u secureview导入
。view\u规则导入参数
```
3。decorate viewsets
`` python
来自rest_framework。viewsets导入modelviewset
来自django_rest_secureview。decorators导入需要从django_rest_secureview导入modelviewset。view_规则导入参数
类apiendpoint(modelviewset):
@require(params,params=['dog','cat'])
def create(self,request):
pass
```
\viewRules
viewRules包含正在实施的API条件背后的逻辑。使用“require”装饰符至少需要一个viewrule。这个包中的默认viewrules都希望有特定的关键字参数来补充它们。如果需要其他功能,可以创建自己的viewrule(如下所述)
1。` params`:要求在requests中提交特定的post params
*kwargs:`params` list
*usage:`@require(params,params=['animal','name'])`
2。` owner`:要求经过身份验证的用户在详细的endpint
*kwargs:`model`django model
*usage:`@require(owner,model=pet)`
*注意:这只在使用默认的'pk'属性的详细端点中有效
3。` owner params`:组合“params”和“owner”条件
*kwargs:`model`django model,`params` list
*usage:`@require(owner,model=pet,params=['animal'])`
*注意:这只在使用默认“pk”属性的详细端点中有效
decorators
1。` require`:接受一个viewrule,它详细描述了api条件和任意数量的关键字值。有关详细信息,请参考viewrule文档。
`` python
期望在post请求中提供animal和name参数
@require(params,params=['animal',name'])
def create(self,请求:
pass
params
@需要所有者(ownerparams,model=pet,params=['name','color'])
def update(self,request,pk=none):
pass
````
为了方便起见,django rest框架中的http状态代码在类的“status”属性中可用,请求对象中的参数在类的“request”属性中可用。
如果不满足特定条件,则所有viewrules都应具有返回json可序列化响应的“enforce”方法。如果不满足条件,则视图集将传递此响应,而不是使用在视图集的操作方法中。
更多状态码:[rest framework状态码](http://www.django-rest-framework.org/api-guide/status-codes/)
`` python
来自django-rest-secureview.view-u-rules-import-viewrule
类mycondition(viewrule):
def-enforce(self,params=none):
self.response(data=notice,status=code)
````
\testing
[tox](https://tox.testrun.org)应该在虚拟环境中运行测试。其他依赖项,如django rest框架,将单独打包到tox的虚拟测试环境中。
`` sh
./运行测试.sh
```