使用django创建简单的json api

django-simple-json-api的Python项目详细描述


django简单json api

安装

pip install django-simple-json-api

说明

dsjapi.decorators.apidsjapi.decorators.api_rq添加到视图函数中。
返回json可序列化对象或django.http.HttpResponse对象。
引发dsjapi.exceptions.ServerException异常将自动返回相应的json响应。

装饰器参数

  • field
    dsjapi.fields.Field
    请求正文中应有字段。默认值是None
  • allowedMethods
    liststr
    允许的http方法(大写)。默认值是["GET", "POST"]
  • safeEncoding
    bool
    True允许非dict响应对象。默认值是False

@api@api_rq

  • @api只提供已验证的请求数据。
  • @api_rq提供一个dsjapi.decorators.Request对象,该对象同时包含request(原始django.http.HttpRequest对象)和data(已验证的请求数据)属性。

示例

视图

fromdsjapi.decoratorsimportapifromdsjapi.fieldsimport*@api(DictField({"name":StringField(minLength=2,maxLength=32,regex=r'^[a-zA-Z ]+$'),"bio":StringField(maxLength=64,missing=Field.Do.DEFAULT,default=""),# Optional (default to "")"age":IntField(min=18,max=130)}))defindex(data):result=putUser(data["name"],data["bio"],data["age"])return{"result":result}
fromdsjapi.decoratorsimportapifromdsjapi.fieldsimport*@api(DictField({"start":ListField.byLength(2,FloatField()),"end":ListField.byLength(2,FloatField(),missing=Field.Do.SKIP),# Optional"time":FloatField(min=120,max=60*60)}))defindex(data):if"end"indata:route=getARoute(data["start"],data["time"])else:route=getABRoute(data["start"],data["end"],data["time"])return{"route":route}
fromdsjapi.decoratorsimportapifromdsjapi.fieldsimport*@api(DictField({"numbers":ListField.byLength(2,FloatField(min=0))}))defindex(data):sum=0fornumberindata["numbers"]:sum+=numberavg=sum/len(data["numbers"])return{"average":avg}
fromdsjapi.decoratorsimportapifromdsjapi.fieldsimport*fromdsjapi.exceptionsimport*@api(DictField({"id":IntField(min=0,max=4096),"password":StringField(min=8,max=32)}))defindex(data):user=getUserById(data["id"])ifuserisNone:raiseNotFoundException("User not found")ifuser.getPassword()!=data["password"]:raiseAuthenticationException("Wrong password")return{"id":user.getId(),"score":user.getScore()}

自定义字段

fromdsjapi.fieldsimportIntField,FieldExceptionclassEvenNumberField(IntField):def__init__(self,min=None,max=None,missing=Field.Do.RAISE,error=Field.Do.RAISE,default=None):super().__init__(int,min=min,max=max,missing=missing,error=error,default=default)defclean(self,value):value=super().clean(value)ifvalue%2!=0:raiseFieldException("Odd number")returnvalue

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

推荐PyPI第三方库


热门话题
图像处理Java 8 ImageIO在Linux中无法正确读取JPEG   spring如何用Java 1.4兼容版本替换@Resource注释   java Http请求参数类型传播   在web浏览器中看不到Java Maven Tomcatplugin web应用程序   jvm在Java中使用直接内存的目的是什么?   如何从列表转换为字符串java   java setAdapter gridview发送上下文   SwingJava。方法上的lang.NullPointerException   java什么是shell脚本、makefile和ant文件   当使用getGraphics()方法时,java JPanel图形会闪烁   java如何将迭代转换为递归?   java为什么我的抽屉菜单在同一个XML上有ConstraintLayout时没有响应?   java如何在图像上画一个圆?   Android studio:Rabbitmq:Error:java。lang.ClassNotFoundException:类io。千分尺。果心仪器找不到仪表注册表