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)
来源:https://www.cnblogs.com/xidianzxm/p/12294980.html