zoukankan      html  css  js  c++  java
  • drf1

    1 web应用
    	-桌面应用(GUI),Tkinter,pyqt(qt平台) 单机版(文件,sqlite,mysql)
        -C/S架构:socket,Http
        -B/S架构:http协议
    2 Http协议:面试重点(请求头,响应头里有 什么,http版本的区别)
    3 web框架:任何语言都会有自己web框架 
    	-java中:
        	-jdk(java开发工具包,java开发必须装),jre(java运行环境,java程序运行),jvm(java虚拟机)
            -java:javaSE(基础语法等),javaEE(web的框架等),javaME(移动开发,淘汰了)
            -ssh框架:spirng, structs,hibernate(orm框架)  war包
            -ssm框架:spring,springMVC,mybatis(orm框架,写原生sql) war包
            -springboot:类似于django,大而全,约定大于配置,默认集成了tomcat  jar包
            -springcloud:微服务,完整的微服务解决方案
        -go中:
        	-go基础,web框架
            -Beego(中国人写的,大而全),gin(大学生写的,企业用得偏多,小而精flask),Iris,Echo,Revel
        -python中:
        	-Django:MTV(mvc)
            -flask(小而精)
            -tornado(逐渐下滑)
            -sanci(逐步上升,不支持windows,异步版本flask)
            -fastapi(异步版本flask)
            
    4 django开发之路
    	-安装,创建项目,启动,配置,目录结构
        -MTV架构
        -路由urls.py
        	-url,path,re_path
            -有名无名分组,路由分发,名称空间
            -转换器,自定义转换器
        -视图Viwes.py
        	-请求对象(http的请求)
            -响应对象(http响应)
           	-四件套
            -cbv和fbv
            -文件上传(编码方式)
        -模板层Templages文件夹
        	-模板语言(DTL)
        	-xx.html 并不是前端得html,属于(字符串替换),任何语言都有模板语言,但是其他框架中一般不以html结尾。
            -变量,变量深度查询
            -标签
            -过滤器
            -自定义标签,过滤器
            -render()--->页面静态化
        -模型层
        	-orm:能创建表,新增删除字段,不能创建数据库
        	-单表
            -数据库连接(mysql)
            -创建表模型(字段,字段参数)
            -多表
           	-三个关系
            -Meta:表名,联合索引,联合唯一,排序
            -查询方法:api
            -单表的__模糊查询
            -多表的__连表查询
            -多表基于对象的跨表查询
            -聚合
            -分组
            -F和Q
        -高级部分
        	-ajax(js的,jq的ajax方法,axios),异步,上传文件,json格式(django内置的序列化器)
            -分页器
            -forms:数据校验和模板渲染,局部,全局钩子函数(源码分析)
            -cookie和session,token,django中如何操作cookie,session
            -中间件:最重要的两个
            -Auth:django内置app,用户相关
       -BBS项目(前后端混合开发)
    		-django 2.0.7+mysql5.6+bootstrap3.x
        	-8张表
            -注册功能:form渲染,头像实时显示,ajax提交数据,ajax渲染错误信息(js的dom操作)
            -登录功能:ajax提交,手写验证码(现成模块,滑动验证码:集成第三方)
            -首页:样式,是否登录显示不同,文章渲染(模板语言:for),分页器
            -个人站点:文章渲染,左侧栏:样式,inclusion_tag,过滤(url设计),三个分组查询
            -文章详情页:母版继承,safe(xss攻击),
            -点赞点踩:样式,ajax提交,事务
            -评论:根评论,子评论,前端:es6字符串格式化语法`${变量名}`,render渲染,ajax渲染,
            -后台管理:文章展示,修改,删除
            -文章新增:富文本编辑器,xss攻击处理
            -密码修改
            -头像修改
            -文章修改
            -django发送邮件 
    

    今日内容

    1 drf内容概况

    1 django-rest-framework:drf,是一个app
        ​ 1-drf-drf入门规范
        ​ 2-drf-序列化组件
        ​ 3-drf-请求与响应
        ​ 4-drf-视图组件
        ​ 5-drf-路由组件
        ​ 6-drf-认证权限频率
        ​ 7-drf-过滤排序分页异常处理
        ​ 8-drf-自动生成接口文档
        ​ 9-drf-JWT认证:token
        ​ 10-drf-Xadmin的使用:第三方写的,比admin好看的后台管理
        ​ 11-Book系列多表群操作
        ​ 12-RBAC-基于角色的访问控制
        django缓存,信号,跨域(cors:跨域资源共享)
    2 Vue:前端js框架
    3 前后端分离项目:路飞学城
    

    2 web开发模式

    1 前后端混合开发(模板语言:DTL),处理很多前端问题
    2 前后端分离:前端是一个项目,后端是一个项目,联调
    	-全栈开发
    3 前端:不仅仅指 web前端,移动端,小程序
    	-web:vue,react,html+css+jq
        -移动端:ios(object c,swift),安卓(java,Kotlin)
        -小程序:微信自己把js,html,css,封装了一些
        
        -发展到现在:大前端概念
        	-flutter:Dart
            -uni-app:vue框架
                
    4 后端只需要返回json格式字符串即可
    

    3 api接口

    1 /books/--->返回json格式数据--->/books/就是一个api接口
    3 api文档(前端开发看的)
    

    4 postman的使用

    # mock数据用于前端测试,postman测试接口后端,最后联调
    1 后端开发完,使用postman测试接口(api接口)
    2 使用postman导出和导入测试接口
    3 公司测试平台
    

    5 drf的安装和使用

    1 djangorestframework:django的app,只能在django上使用
    2 pip3 install djangorestframework
    	django: 2.0.7 ,1版本也可以
        djangorestframework:最新版本的可能会导致django升级到最新版
    # 使用在视图函数中导入from rest_framework.views import APIView,from rest_framework.response import Response,视图函数必须写类的形式,然后继承APIView,在url中的视图函数地址应该写成views.类名.as_view()。在使用时settings中需要注册app,注册的名字为rest_framework,不注册使用也能正常使用,但是在使用response时会报错。
    

    6 cbv源码回顾

    # drf:APIView的源码分析
        def as_view(cls, **initkwargs):
            # 这句话执行完成返回 view闭包函数的内存地址
            view = super().as_view(**initkwargs) # 调用父类(Django的View)的as_view
            view.cls = cls   # 一切且对象,只要是对象,就可以对象.xx=ee,往对象里面赋值,此处是将cls放入了view这个对象里。
            view.initkwargs = initkwargs
            view=csrf_exempt(view)  # 局部禁用csrf
            return view
    
     # 装饰器的使用方式
    @csrf_exempt   # 本质原理其实就是 view=csrf_exempt(view)
    def view():
        pass
    
    # 请求来了,会执行上面返回的view()---->self.dispatch(APIView的dispatch,而不是django里原来view里面的dispatch)
    # APIView的dispatch方法
        def dispatch(self, request, *args, **kwargs):
    		# 把原生的request,封装进新的Request对象(drf的Request),return出来后赋值给request,然后赋值给自己
            request = self.initialize_request(request, *args, **kwargs)
            self.request = request
            try:
            	# 重点(频率,认证,权限。。。)
                self.initial(request, *args, **kwargs)
    
                if request.method.lower() in self.http_method_names:
                    handler = getattr(self, request.method.lower(),  # 通过反射,假如时get请求来了,那么通过反射将get请求的内存地址赋值给handler,然后后面通过handler()来执行请求
                                      self.http_method_not_allowed)
                else:
                    handler = self.http_method_not_allowed
    			# 这个request新的requst,是drf中Request对象
                # response是原生response
                response = handler(request, *args, **kwargs)
    
            except Exception as exc:
                # 全局异常
                response = self.handle_exception(exc)
    		# 把原生response包装了一下
            self.response = self.finalize_response(request, response, *args, **kwargs)
            return self.response
    # 请求来了,经过中间件和路由,进入APIview,然后将http请求中的request替换了,然后执行视图中的函数,最后返回的原生response,然后又拿到了原生response,将原生response包装,最后返回,就像是一个装饰器一样,对请求对象和响应对象进行了包装,变成了drf中的request和response。
    
  • 相关阅读:
    单例模式
    Curator Zookeeper分布式锁
    LruCache算法原理及实现
    lombok 简化java代码注解
    Oracle客户端工具出现“Cannot access NLS data files or invalid environment specified”错误的解决办法
    解决mysql Table ‘xxx’ is marked as crashed and should be repaired的问题。
    Redis 3.0 Cluster集群配置
    分布式锁的三种实现方式
    maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令
    How to Use Convolutional Neural Networks for Time Series Classification
  • 原文地址:https://www.cnblogs.com/feiguoguobokeyuan/p/14012501.html
Copyright © 2011-2022 走看看