django框架實現restful風格的API開發


RESTful風格的要求:https://www.cnblogs.com/chichung/p/9933116.html

利用django原生的框架直接做RESTful的API開發是怎樣的呢?感受一下:

import json
from django.http import JsonResponse, HttpResponse
from django.views import View
from user.models import Department


class DepartmentListAPIView(View):
    def get(self,request):
        """查詢所有部門  GET     /departments/"""

        query_set = Department.objects.all()
        department_list = []
        for i in query_set:
            department_list.append({"id":i.id,"name":i.name,"create_date":i.create_date})
        # JsonResponse 可以把字典、列表轉換為json.但是轉換列表時需要指定,safe=False
        return JsonResponse(department_list,safe=False)


    def post(self,request):
        """新增一個部門
        restful要求url地址是/departments
        要求成功返回的狀態碼是201(創建成功)
        要求返回新生成的資源的對象"""
        json_str = request.body.decode()  # 二進制-->json字符串
        data_dict = json.loads(json_str)  # json字符串-->字典
        # 校驗參數(略)
        department = Department()
        department.name = data_dict["name"]  # 字典獲取值,[]或者.get(key)
        department.save()  # 字典-->對象
        dict_data = {    # 對象-->字典
            "id":department.id,
            "name":department.name,
            "create_date":department.create_date,
            "is_delete":department.is_delete
        }
        return JsonResponse(dict_data,status=201)  # 字典-->json字符串


class DepartmentDetailAPIView(View):
    def get(self,request,pk):
        """查詢一個部門"""
        department = Department.objects.get(id=pk)  # 對象
        # 對象轉化為字典
        date_dict = {
            "id":department.id,
            "name":department.name,
            "create_date":department.create_date,
            "is_delete":department.is_delete
        }
        return JsonResponse(date_dict)  # 字典-->json字符串

    def put(self,request,pk):
        """
        修改一個部門  PUT     /departments/<pk>/
        :param pk: 主鍵,部門id
        """
        json_str = request.body.decode()  # 二進制-->json字符串
        data_dict = json.loads(json_str)  # json字符串-->字典
        # 校驗參數(略)
        department = Department.objects.get(id=pk)  # 獲取要修改的對象
        department.name = data_dict.get("name")
        department.create_date = data_dict.get("create_date")
        department.save()
        # restful要求put方法返回修改的對象的全部屬性
        data_dict = {  # 對象-->字典
            "id":department.id,
            "name":department.name,
            "create_date":department.create_date,
            "is_delete":department.is_delete
        }
        return JsonResponse(data_dict,status=200)

    def delete(self,request,pk):
        """刪除一個部門"""
        count = Department.objects.get(id=pk).delete()
        if count == 0:
            return HttpResponse(status=404)
        return HttpResponse(status=204)  # restful要求刪除成功返回204狀態碼

 

同時,urls的設置也要restful一點:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^departments$',views.DepartmentListAPIView.as_view()),
    url(r'^departments/(?P<pk>\d+)$',views.DepartmentDetailAPIView.as_view())
]

 

結論:太麻煩了,還是得用 Django REST Framework啊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM