zoukankan      html  css  js  c++  java
  • 一、restful规范 二、CBV(View)源代码执行流程 三、drf框架安装和简单使用

    一、restful规范

    '''
    它是一个规范,面向资源架构
    
    十条规范
    1.API与用户的通讯协议,总是使用HTTPs协议,确保了网络传输的安全性
    2.域名 
           --https://api.example.com   :尽量将API部署在专用域名(会存在跨域问题)
           --https://example.org/api/  :这个写法简单,推荐使用
    3.版本
        --https://api.example.com/v1/ 把版本号放在请求头中
    4.路径 在网络上任何东西都是资源,均使用名词表示(可复数)
        --127.0.0.1/books/
    5.method 通过请求方式来表示进行的操作
        --127.0.0.1/books/ get请求:表示获取所有图书
        --127.0.0.1/books/1  get请求:表示获取id为1的图书
        --127.0.0.1/books/  post请求:表示新增一本书
        --127.0.0.1/books/  delete请求:表示删除一本书
        --127.0.0.1/books/  put/patch请求:表示修改一本书
    6.过滤 通过在url上传参的形式传递搜索条件
    7.状态码
        1 开头: 服务器正在处理
        2 开头: 服务器处理成功
        3 开头: 重定向
        4 开头: 客户端错误
        5 开头: 服务器错误
        --注意:再返回的数据中携带状态码
    8.错误处理.应返回错误信息,error当做key
    9.返回结果针对不同操作,返回数据格式不同
      --所有数据:列表
      --删除数据:返回一个空 {status:100,error:'删除成功!',data:''}
      --修改数据:{status:100,error:'修改成功!',data:{id:1,title:'西游记'}}
    10.返回结果中提供链接
    
    总结:必须说出来的就两条: 1.路径都用名词表示 2.请求方式不同,表示不同的操作
    '''

    二、CBV(View)源代码执行流程

    '''
    什么是闭包函数?
    内部函数有对外部函数作用域的引用
    
    getattr反射
    handler是请求函数的内存地址
    '''

    路由层

    #url是一个函数,第一个参数是正则表达式,第二个参数是函数的内存地址
    url(r'^books/', views.Books.as_view())
    
    #当程序启动的时候,url这个函数已经执行,第二个位置参数已经形成了一个函数的内存地址(as_view()返回值的是源代码中view这个函数的内存地址)
    #比如来了一个get请求,拿到第二个位置参数内存地址加括号执行,其实就是view(request, *args, **kwargs),本质就是执行dispatch(request, *args, **kwargs)
    #dispatch方法内部通过请求方式(get,post),反射出要执行的方法,去执行,然后返回(return handler(request, *args, **kwargs)) handler是请求函数的内存地址

    业务逻辑层

    from django.shortcuts import render,HttpResponse
    from django.http import JsonResponse
    from django.views import View
    
    class Books(View):
        def get(self,request):
            l1=[{'id':1,'title':'追风筝的人'},{'id':2,'title':'解忧杂货店'}]
            #如果转列表一定要写safe=False,否则会报错 如果转字典不需要
            return JsonResponse(l1,safe=False,json_dumps_params={'ensure_ascii':False})
        def post(self,request):
            return HttpResponse('ok')

    三、drf框架安装和简单使用

    '''
    在Django中
    urlencode编码
    formdata编码
    json编码:request.POST是没有值的,只能从body中取出,直接处理
    -urlencode和formdata编码,request.POST可以提供值  
    '''
    '''
    drf框架
    在原来django框架的基础上多做了一些事
    
    安装:djangorestframework
    
    rest_framwork本质上是一个app,要使用它我们需要在settings中对其进行配置
    
    只要用drf,以后写的都是cbv
    
    drf提供的:序列化组件 视图组件 解析器 认证组件 权限组件 频率组件 分页器 响应器 url控制器 版本控制
    '''

    路由层

    url(r'^books/', views.Books.as_view())

    业务逻辑层

    from django.shortcuts import render,HttpResponse
    from django.http import JsonResponse
    from rest_framework.views import APIView
    class Books(APIView):
        def get(self,request):
            l1=[{'id':1,'title':'追风筝的人'},{'id':2,'title':'解忧杂货店'}]
            #如果转列表一定要写safe=False,否则会报错 如果转字典不需要
            return JsonResponse(l1,safe=False,json_dumps_params={'ensure_ascii':False})
        def post(self,request):
            return HttpResponse('ok')

    APIView的源码执行流程

    '''
    APIView继承的是View
    比如①get请求来了,执行APIView中的as_view(),只要继承了APIView,都没有csrf校验了,源码中本质还是执行的View中的as_view方法内部的view闭包函数,view闭包函数中执行了dispatch方法
    ②先在业务逻辑层找有没有dispatch方法,没有直接到父类(APIView)中找,现在执行的不再是View中的dispatch方法,而是APIView的dispatch方法,返回一个request对象(这个request对象已经不是原生的request对象,但是内部包含了原生request对象),APIView中的dispatch方法中调用了initial方法,这个方法中包含了认证,权限以及频率组件
    ③dispatch方法内部通过请求方式(get,post),反射出要执行的方法,去执行
    
    在rest_framwork中将原生request赋给了_request,在业务逻辑层request.GET仍可以使用,首先找自己request中有没有,如果没有,从self._request中找,就可以找到原生的request中的GET.
    
    在drf框架中request.GET,request._request.GET以及request.query_params是一样的
    request.data 这个data是post,put的内容都在里面
    '''
  • 相关阅读:
    Druid数据库密码加密
    jenkins 构建时不能自动结束的问题
    4、TypeScript 类
    3、TypeScript 函数
    2、Typescript 中的数据类型
    1、TypeScript安装、开发工具
    Markdown 基本格式
    解决邮箱下载下来的word打不开的问题
    winform在禁用控件上显示工具提示
    日常问题集
  • 原文地址:https://www.cnblogs.com/lizeqian1994/p/10596517.html
Copyright © 2011-2022 走看看