zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    最近半年
    CentOS 6.4和Eclipse Juno CDT(4.2.2)的bug
    cygwin/X XDMCP连接CentOS
    手把手教你emacs cedet C/C++自动补全
    ProFont – 识别度极高的终端字体
    ACE之旅——环境搭建、HelloWorld
    静态链表在优化中的应用
    ACE之旅——第一个ACE通讯程序daytime
    ThinkPHP 自定义标签测试 冰糖
    FreeTextBox使用详解 (版本3.1.1)
  • 原文地址:https://www.cnblogs.com/xidianzxm/p/12294980.html
Copyright © 2011-2022 走看看