zoukankan      html  css  js  c++  java
  • day70 drf初始

    复习

    '''
    vue指令:
    	v-text | v-html | v-once
    	v-bind | v-on => : | @
    	v-model
    	v-show |v-if | v-else-if | v-else
    	v-for
    
    vue成员:
    	el | template | data | method watch computed filter props components
    
    vue文件组件:
    	<tempkate>
    		<div>
    		...
    		</div>
    	</tempkate>
    	<script>
    		exprt default {
    			...
    		}
    	</script>
    	<style scope>
    	</style>
    '''
    

    drf

    DRF是一个强大灵活的Django工具包,用于在Web后台构建Restful接口

    '''
    Django-rest framework
    drf是django的插件,所以要提前安装django
    按命令:pip install djangorestframework
    使用drf时,要在settings中注册
    '''
    

    接口

    '''
    drf:django-restframework
    drf框架的作用:写接口
    
    什么是接口:
    	规定了提交请求参数的请求方式,访问其可以获取响应的反馈数据的url链接
    	四部分:url链接+请求方式+请求参数+响应数据
    	url:长得像返回数据的url链接
    		https//api.map.baidu.com/place/v2/search
    	请求方式:get  post  put  patch  delete
    		采用get方式请求上方接口
    	请求参数:json或xml格式的key-value类型数据
    		ak:43542545cfdscds342
    		region:上海
    		query:肯德基
    		output:json
    	响应结果:json或xml格式的数据
    		上方请求参数的output参数值决定了响应数据的格式
    怎么写接口:
    	参照某种规则(规范)书写url链接,同时根据规则制定请求方式,请求数据与响应结果
    	
    接口文档:
    	提供给前台开发人员与测试人员查看
    	Yapi
    接口规范:
    	webapi接口规范:restful
    '''
    

    接口文档的编写

    YApi是去哪网大前端技术中心的一个开源可视化 接口管理平台。
    YApi项目可以搭建在任何本地或服务器上,完成后台项目开发时的接口编写。为开发、测试等人员提供可视化的接口预览
    YApi网址

    restful接口规范

    '''
    get  post  put  patch  delete 
    
    url链接:
    	1、接口都是操作前后台数据的,所以需要保证数据的安全性 采用https协议
    	
    	2、接口用来操作数据,与网址(操作页面)有区别,所以用特定的关键字表示接口
    	api关键字:-https://api.baidu.com
    			  -https://www.baidu.com/api
    			  
    	3、接口操作的数据称之为 资源,在url中只体现 资源 名称(名词)。不体现操作资源的方式动词:
    	常规资源接口
    		-http://api.baidu.com/books/
    	非常规接口-和某资源不是特别密切或者不是一种资源
    		-http://api.baidu.com/login/
    		-http://api.baidu.com/place/search/
    		
    	4、如果一个资源存在多个版本结果,在url链接中要用特定符号来兼容多版本共存
    	v1  |  v2
    	-http://api.baidu.com/v1/books/
    	-http://api.baidu.com/v2/books/
    	
    	5、群资源操作:一般还有额外的限制条件,如排序、限制,限制调试、分页等等
    	?限制条件
    		-http://api.baidu.com/v1/books/?ordering=price&limit=3
    
    	
    请求方式
    	6、五大请求方式
    		get:获取单个或多个资源
    			-http://api.baidu.com/books/   群查,返回多个结果对象
    			-http://api.baidu.com/books/(pk)/   单查,返回单个结果对象
    		
            post:新增单个或多个资源
            	-http://api.baidu.com/books/ 
    			单增,提交单个数据字典,完成单增,返回单个结果对象
    			群增,提供多个数据字典的数组,完成群增,返回多个结果对象
    			
    		put:整体修改单个或多个资源
    			-http://api.baidu.com/books/   整体修改多个,提供多个数据字典的数组(数据字典中药包含主键),完成群改,返回多个结果对象
    			-http://api.baidu.com/books/(pk)/   整体修改单个,提供单个数据字典(主键在url中体现),完成单改,返回单个结果对象
    			
    		patch局部修改单个或多个资源
    			方式与put完全相同,不同的是:操作的资源如果有5个key-value键值对,put请求提供的字典必须全包含,但是patch提供的字典包含的键值对0~5个都可以
    			
    		delete:删除单个或多个资源
    			-http://api.baidu.com/books/   多删,提供多个资源主键数据,完成群删,不做任何资源返回(一般我们会返回结果信息:成功|失败)
    			-http://api.baidu.com/books/(pk)/   单删,不需要提供额外数据,完成单删,不做任何资源返回(一般我们会返回结果信息:成功|失败)
    		
    响应结果
    	7、响应对象中要包含网络状态码(网络状态信息和网络状态码捆绑出现,不要额外设置)
    		1xx:基本信息
    		2xx:成功 -200基本   201新增成功
    		3xx:重定向
    		4xx:客户端错误 -400cuowu 请求;403请求无权限;404请求资源不存在
    		5xx:服务端错误 -服务器错误
    	
    	8、数据状态码(一般都是前后台约定规则)
    		0:成功
    		1:失败 -1xx;具体失败信息(要在接口文档中明确写出)
    		2:无数据 -2xx:具体无数据信息(要在接口文档中明确写出)
    	
        9、数据状态信息(一般不仅仅是对数据状态码的解释,更多的是对结果的描述,给前台开发者阅读的)
        
    	10、数据结果(常量、数组、字典),如果有子资源(图片、音频、视频),返回资源的url链接
    		{
        		"status": 0,
        		"msg": 'ok',
        		"results": [{
        			"name": "西游记",
        			"img": "https://api.baidu.com/media/book/xyj.png"
        		}]
    		}
    '''
    

    drf请求周期 -CBV

    CBV源码

    as_view()=>view()=>dispatch()=>视图类的视图方法get | post

    #as_view
    @classonlymethod
    def as_view(cls, **initkwargs):
        for key in initkwargs:……  # initkwargs没有进行赋值,该逻辑不会执行 
        def view(request, *args, **kwargs):  # 请求来了完成响应的函数
            self = cls(**initkwargs)  # cls是我们自己写的类 MyLogin  self是我们自己定义的类的对象
    
            self.request = request  # wsgi协议包装数据后的request 
            self.args = args  # 无名分组参数
            self.kwargs = kwargs  # 有名分组参数
            return self.dispatch(request, *args, **kwargs)  # view返回什么,用户就能看到什么
    
        # 将请求来调用view的修改信息保存在view对象中
        view.view_class  = cls
        view.view_initkwargs = initkwargs
    
        # 看源码的时候一定要注意在查找属性和方法的时候先从对象自身找,再去类中查找,再去父类查找
        return view  # 返回请求调用的函数地址,进行路由绑定 base.py
    #请求来了完成响应的函数
    def view(request, *args, **kwargs)
    
    #将请求来调用view的修改信息保存在view对象中
    view.view_class = cls
    view.view_initkwargs = initkwargs
    
    #返回请求调用的函数地址,进行路由绑定
    return view
    
    #dispatch
    def dispatch(self, request, *args, **kwargs):
        # Try to dispatch to the right method; if a method doesn't exist,
        # defer to the error handler. Also defer to the error handler if the
        # request method isn't on the approved list.
        # 判断当前请求方式在不在默认的八个方法内
        # 1.先以GET请求为例
        if request.method.lower() in self.http_method_names:
            # 利用反射去我们自己定义类的对象中查找get属性或者是方法  getattr(obj,'get')
            # handler = get方法
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        return handler(request, *args, **kwargs)  # 调用get方法
    

    CBV生命周期与debug

    urls.py

    from app01 import views
    urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^book/$',views.BookView.as_view()),
        url(r'^book/(?P<pk>)/$',views.BookView.as_view()),
    ]
    

    views.py

    from django.shortcuts import render
    from django.http import JsonResponse
    from django.views import View
    from . import models
    
    
    # Create your views here.
    # 一个视图类可以保护常规五个请求方法:get|post|put|patch|delete
    # 五个请求方法处理十个资源操作的逻辑:单群查|单群增|单群整体改|单群局部改|单群删
    class BookView(View):
        def get(self, request, *args, **kwargs):
            pk = kwargs.get('pk')
            if pk:  # 单查
                book_dic = models.Book.objects.filter(pk=pk).values('name', 'price').first()
                if not book_dic:
                    return JsonResponse({
                        'status': 1,
                        'msg': '单查  资源不存在'
                    })
                return JsonResponse({
                    'status': 0,
                    'msg': '单查 ok',
                    'results': book_dic
                })
            else:  # 群查
                book_query = models.Book.objects.values('name', 'price')
                book_list = list(book_query)
                return JsonResponse({
                    'status': 0,
                    'msg': '群查 ok',
                    'results': book_list
                })
    
        def post(self, request, *args, **kwargs):
            return JsonResponse({
                'status': 0,
                'msg': 'put ok'
            })
    
        def put(self, request, *args, **kwargs):
            return JsonResponse({
                'status': 0,
                'msg': 'put ok'
            })
    
        def patch(self, request, *args, **kwargs):
            return JsonResponse({
                'status': 0,
                'msg': 'put ok'
            })
    
        def delete(self, request, *args, **kwargs):
            return JsonResponse({
                'status': 0,
                'msg': 'put ok'
            })
    
    

    drf的基础组件:

    请求、响应、渲染、解析、异常

    drf的序列化(核心)

    序列化 模型序列化 群操作序列化

    drf的视图家族

    视图类(常用) 视图工具类 工具视图类(常用)视图集

    drf的三大认证(核心)

    认证 权限 评率

    drf的过滤

    筛选 搜索 排序 分页 区间

  • 相关阅读:
    解析时间parse time
    php一些高级函数方法
    PHP定界符<<<EOF
    linux crontab(定时任务)
    svn提交按钮灰选
    centos官网下载地址
    centos7 yum安装LAMP
    saprfc
    RSA加解密工具类RSAUtils.java,实现公钥加密私钥解密和私钥解密公钥解密
    接入HTTPS协议的CAS登录配置
  • 原文地址:https://www.cnblogs.com/zqfzqf/p/12089023.html
Copyright © 2011-2022 走看看