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)