美文网首页
Django之API 管理利器 rest framework

Django之API 管理利器 rest framework

作者: 金融测试民工 | 来源:发表于2020-11-27 10:20 被阅读0次

   Django常用的接口封装类有render_to_response、JsonResponse、Response等,各类的使用及参数设置方法文档里都有说明,不赘述。尽管封装方法多样,但是url-view映射自定义接口的封装模式相对比较麻烦。

     DJANO 从1.10版本开始,可以使用Edjangorestframework模块来进行WEB APIs管理,如文档所言,REST framework是一款灵活、强大的API管理工具包,绝对是一款利器!

    安装使用要点(示例):

    1,环境要求:

         python2.7 , 3.2及以上;Django >1.10.

    2,安装:

       pip install djangorestframework

       pip install markdown       # Markdown support for the browsable API.

       pip install django-filter  # Filtering support

  3,使用

    (1)settings.py配置

      <1>  

INSTALLED_APPS中加入rest_framework

    INSTALLED_APPS= {

...

    'rest_framework',

}

     < 2>权限认证

REST_FRAMEWORK= {

# Use Django's standard `django.contrib.auth` permissions,

# or allow read-only access for unauthenticated users.

      'DEFAULT_PERMISSION_CLASSES': [

        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'

      ]

}

     (2) 模型定义,序列化      

       models.py模型定义:

    classTemplateMail(models.Model):    """邮件参数模板表模型类"""

        name= models.CharField(max_length=255, unique=True)

        description= models.TextField(max_length=1023, blank=True, null=True)

        subject= models.TextField(max_length=2047)

#其他字段           序列化serialiser:

    class TemplateMailSerializer(serializers.HyperlinkedModelSerializer):

       class Meta:

          model= TemplateMail

           fields= ("id", "name", "description", "subject", ) #其他字段

        方法定义:

     def create(self, validated_data):

"""

Create and return a new `Snippet` instance, given the validated data.

"""

      return TemplateMail.objects.create(**validated_data)

  def  update(self, instance, validated_data):

"""

Update and return an existing `Snippet` instance, given the validated data.

"""

     instance.name= validated_data.get('name', instance.name)

        instance.description= validated_data.get('description', instance.description)

        instance.subject= validated_data.get('subject', instance.subject)

# 其他 字段

        instance.save()

        return instance

         (3) Viewset(app/views.py中)

@api_view(["GET", "POST"])

def  templatemail_list(request, format=None):

"""

List all code TemplateMail, or create a newTemplateMail.

"""

    if request.method== 'GET':

        mailtpls= TemplateMail.objects.filter(active=True)#all()

        serializer= TemplateMailSerializer(mailtpls, many=True)

return Response(serializer.data)

    elif request.method== 'POST':

        serializer= TemplateMailSerializer(data=request.data)

    if serializer.is_valid():

            serializer.save()

    return Response(serializer.data, status=status.HTTP_201_CREATED)    

    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

@api_view(['GET', 'PUT', 'DELETE'])

def  templatemail_detail(request, id,  format=None):

"""

Retrieve, update or delete a code snippet.

"""

    try:

        tplmail= TemplateMail.objects.get(id=id, active=True)

    except TemplateMail.DoesNotExist:

        return Response(status=status.HTTP_404_NOT_FOUND)

   if request.method== 'GET':

        serializer= TemplateMailSerializer(tplmail)

    return Response(serializer.data)

    elif request.method== 'PUT':

        serializer= TemplateMailSerializer(tplmail, data=request.data)

    if serializer.is_valid():

            serializer.save()

    return Response(serializer.data)

    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

   elif request.method== 'DELETE':

        tplmail.delete()

    return Response(status=status.HTTP_204_NO_CONTENT)

      (4) 添加路由(如果需要在WEB端使用)

      app/urls.py下

urlpatterns= [...

    url(r'^mailtpl$', templatemail_list),  # 列表、create

    url(r'^mailtpl/(?P<id>[0-9]+)$', templatemail_detail),  # 更新/删除

]

      (5)API调用

      依照标准restful API调用模式

         1> 获取模型对象列表   site/mailtpl, GET方法;

         2>创建模型对象:~/mailtpl, POST方法,传递对象信息;

        3>更新模型对象:~/mailtpl/(对象id), PUT方法,传递对象信息;

         4>删除模型对象:~/mailtpl/(对象id),GET方法;

       OK ,如需其他接口,可参考以上模式进行封装。

       以上结合自己的应用实践,讲了一些rest_framework的使用要点,详细使用方法可直接参照官方文档。

     django rest framework真的非常强大,没有用起来的小伙伴抓紧了。

      希望对未使用或打算使用DJANGO rest_framwork来进行WEB API 管理的同学有所帮助。

相关文章

网友评论

      本文标题:Django之API 管理利器 rest framework

      本文链接:https://www.haomeiwen.com/subject/acztwktx.html