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。
    
  • 相关阅读:
    [原]POJ1141 Brackets Sequence (dp动态规划,递归)
    [转]10分钟入门python
    [原]sdut2605 A^X mod P 山东省第四届ACM省赛(打表,快速幂模思想,哈希)
    [原]SQL_实验2.1.3 清华大学出版社
    [原]sdut2624 Contest Print Server (大水+大坑)山东省第四届ACM省赛
    [原]hdu2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (这个只是题目名字) (多重背包)
    快速幂运算
    山东省acm省赛 I Sequence(动态规划)
    [ACM] 携程预赛第一场 括号匹配 (动态规划)
    [ACM] poj 1141 Brackets Sequence (动态规划)
  • 原文地址:https://www.cnblogs.com/feiguoguobokeyuan/p/14012501.html
Copyright © 2011-2022 走看看