zoukankan      html  css  js  c++  java
  • django rest-framework

    django rest framework使用

      安装

    pip install djangorestframework

      配置

    INSTALLED_APPS = (
        ...
        'rest_framework',
    )
    
    
    REST_FRAMEWORK = {
        # 编码格式  
        'UNICODE_JSON': False,
    }

      主urls

    urlpatterns = [
        ...
        url(r'^api/', include('web.rest_urls')),
    ]

      rest_urls

    from django.conf.urls import url, include
    from rest_framework import routers
    from web.rest_views import *
    from web.views import account_list, account_detail
    
    # Routers provide an easy way of automatically determining the URL conf.
    # 注册
    router = routers.DefaultRouter()
    router.register(r'account', AccountViewSet)
    
    
    # Wire up our API using automatic URL routing.
    # Additionally, we include login URLs for the browsable API.
    urlpatterns = [
        # 默认
        url(r'^', include(router.urls)),
        # 自定义功能
        url(r'^account_list/$', account_list),
        url(r'^account_detail/(d+)/$', account_detail),
        # api认证
        url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
    ]

      rest_views

    #!/usr/bin/env python
    from rest_framework import viewsets
    from web.rest_searilizers import AccountSerializer
    from web import models
    
    
    # ViewSets define the view behavior.
    class AccountViewSet(viewsets.ModelViewSet):
        queryset = models.Account.objects.all()
        serializer_class = AccountSerializer

      rest_searilizers

    #!/usr/bin/env python
    from rest_framework import serializers
    from web import models
    
    
    # Serializers define the API representation.
    class AccountSerializer(serializers.HyperlinkedModelSerializer):
        class Meta:
            model = models.Account
            #关键字段
            fields = ('email', 'name', 'role', 'customer')

      views 自定义功能

    # rest
    from rest_framework.decorators import api_view
    from web import rest_searilizers
    from rest_framework import status
    from rest_framework.response import Response
    
    @api_view(['GET', 'POST'])
    def account_list(request):
        """
        List all snippets, or create a new snippet.
        """
        if request.method == 'GET':
            account_obj = models.Account.objects.all()
            serializer = rest_searilizers.AccountSerializer(account_obj, many=True)
            return Response(serializer.data)
    
        elif request.method == 'POST':
            print("request", request.data)
            serializer = rest_searilizers.AccountSerializer(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'])
    @csrf_exempt
    def account_detail(request, pk):
        """
        Retrieve, update or delete a snippet instance.
    
        """
        # pk 跟 id 是一样的
        try:
            account_obj = models.Account.objects.get(pk=pk)
        except account_obj.DoesNotExist:
            return Response(status=status.HTTP_404_NOT_FOUND)
    
        if request.method == 'GET':
            serializer = rest_searilizers.AccountSerializer(account_obj)
            return Response(serializer.data)
    
        elif request.method == 'PUT':
            serializer = rest_searilizers.AccountSerializer(account_obj, 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':
            account_obj.delete()
            return Response(status=status.HTTP_204_NO_CONTENT)

    访问 http://127.0.0.1:8000/api/account_list/?format=json ,可以查看到接口提供的数据

    详细参考 http://www.django-rest-framework.org/#example

    restful-api 设计规范 http://www.cnblogs.com/alex3714/articles/6808013.html

  • 相关阅读:
    【算法】欧几里德算法--求最大公约数
    g++编译器的使用
    How arduino IDE works?
    【算法】反转链表
    判断一个数是否含有相同的数字
    Java集合ArrayList源码解读
    【算法】二分查找
    移动架构-原型模式
    移动架构-单例模式
    移动架构-简单工厂模式
  • 原文地址:https://www.cnblogs.com/wangyufu/p/7149423.html
Copyright © 2011-2022 走看看