Django系列:Restful CBV

CBV 类视图

  • CBV
  • 继承自View
  • 注册的时候使用的as_view()
  • 入口
    • 不能使用请求方法的名字作为参数的名字
    • 只能接受已经存在的属性对应的参数
    • 定义了一个view
      • 创建了一个类视图对象
      • 保留,拷贝传递进来的属性和参数
      • 调用dispatch方法
        • 分发
        • 如果请求方法在我们的允许的列表中
          • 从自己这个对象中获取请求方法名字小写对应的属性,如果没有找到,会给一个默认http_method_not_allowded
        • 如果请求方法不在我们允许的列表中,直接就是http_method_not_allowed
        • 之后将参数传递,调用函数
  • 默认实现了options
    • 获取接口信息,可以获取接口都允许什么请求
  • 简化版流程
    • as_view
    • dispath
    • 调用实现请求方法对应的函数名
urls.py
from django.conf.urls import url

from CBV import views

urlpatterns = [
    url(r'^hello/', views.HelloCBV.as_view(msg='Sleeping'), name='hello'),
    url(r'^books/', views.BooksCBV.as_view(), name='books'),
]
models.py
from django.db import models


class Book(models.Model):
    b_name = models.CharField(max_length=32)
    b_price = models.FloatField(default=1)

    def to_dict(self):
        return {'id': self.id, 'b_name': self.b_name, 'b_price': self.b_price}
views.py
from django.http import HttpResponse, JsonResponse
from django.views import View

from CBV.models import Book


class HelloCBV(View):

    msg = None

    def get(self, request):

        return HttpResponse("hahaha %s" % self.msg)

    def post(self, request):
        return HttpResponse("POST 666")

    def put(self, request):
        return HttpResponse("PUT 666")


class BooksCBV(View):
    def get(self, request):
        book_list = Book.objects.all()

        book_list_json = []

        for book in book_list:
            book_list_json.append(book.to_dict())

        data = {
            'status': 200,
            'msg': 'ok',
            'data': book_list_json
        }

        return JsonResponse(data=data)

    def post(self, request):
        b_name = request.POST.get('b_name')
        b_price = request.POST.get('b_price')

        book = Book()
        book.b_name = b_name
        book.b_price = b_price
        book.save()

        data = {
            'status': 201,
            'msg': 'add success',
            'data': book.to_dict()
        }

        return JsonResponse(data=data, status=201)

猜你喜欢

转载自www.cnblogs.com/xidianzxm/p/12294980.html
CBV