zoukankan      html  css  js  c++  java
  • DRF之REST规范介绍及View请求流程

    DRF是什么?

    早期的url设计是毫无章法的,每个人的思维方式不一样、命名方式不一样而导致的url非常的乱,不方便项目的后期维护和扩展。

    • 对于请求处理成功或者失败的返回信息没有明确的响应信息规范,返回给客户端的信息往往都是很随意的

    比如这样的url:

    以上这些情况的出现,导致了很多的问题,让互联网的世界变得杂乱不堪,日益复杂且臃肿。因此http协议创始人告诉人们正在错误的使用http协议,除了警告,他发表了一篇博客,大概意思就是教大家如何正确使用http协议,如何正确定义url,这就是REST(Representational State Transfer),总结来,一句话:

    • 用url唯一定位资源,用Http请求方式(GET, POST, DELETE, PUT)描述用户行为

    RESTful Api设计风格

    DRF

    可以看到,url非常简洁优雅,不包含任何操作,不包含任何动词,简简单单,用来描述服务器中的资源而已,服务器根据用户的请求方式对资源进行各种操作。而对数据的操作,最常见的就是CRUD(创建,读取,更新,删除),通过不同的请求方式,就足够描述这些操作方式了。如果不够用,Http还有其他的请求方式呢!比如:PATCH,OPTIONS,HEAD, TRACE, CONNECT。

    REST定义返回结果

    DRF

     REST定义错误信息

    {
        "error": "Invalid API key"
    }
    
    # 通过一个字典,返回错误信息。
    
    # 这就是REST,上图中的url就是根据REST规范进行设计的RESTful api
    

    Django的CBV请求流程

    话不多说,看图,图看明白就可以了

    注:我们在剖析看源码的时候,一定要清楚self是谁,知道self是谁,基本我们看源码思路就非常清晰了

    Django的rest_framework的APIView就是对View的功能扩展

    from django.shortcuts import HttpResponse
    
    import json
    
    from .models import Courses
    
    # 引入APIView
    from rest_framework.views import APIView
    # Create your views here.
    
    
    class CoursesView(APIView):  # 继承APIView而不是原来的View
        def get(self, request):
            courses = list()
    
            for item in Courses.objects.all():
                course = {
                    "title": item.title,
                    "description": item.description
                }
    
                courses.append(course)
    
            return HttpResponse(json.dumps(courses, ensure_ascii=False))
    

    DRF APIView的请求流程,基于View

    可以看出,改组件是通过重写dispatch()方法或as_view()方法来实现其功能的

  • 相关阅读:
    Linux下查看系统版本号信息的方法(转载)
    tomcat 启动超级慢
    新生代老年代GC组合
    GC 提前晋升
    Mysql 锁技术要点【转载】
    第39天:字符串连接、截取操作
    第38天:运算符、字符串对象常用方法
    第37天:小米手机图片展示
    第36天:倒计时:发动短信验证、跳转页面、关闭广告
    第35天:时钟效果
  • 原文地址:https://www.cnblogs.com/--kai/p/10105166.html
Copyright © 2011-2022 走看看