web开发模式及drf的介绍等相关内容-82

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 (字符串替换)
       -变量,变量深度查询
       -标签
       -过滤器
       -自定义标签,过滤器
       -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接口
2 开放的api接口
-微博
   -百度
   
3 api文档(前端开放看的)

4 典型的api接口
-https://api.weibo.com/2/statuses/home_timeline.json

4 postman的使用

1 后端开放完,使用postman测试接口(api接口)
2 使用postman导出和导入测试接口(自己回去试一下)
3 公司测试平台

5 drf的安装和使用

1 djangorestframework:django的app,只能再django上使用
2 pip3 install djangorestframework
3 简单使用,看代码
django: 2.0.7 ,1版本也可以
   djangorestframework:3.12.1

6 cbv源码回顾



# drf:APIView的源码分析

   def as_view(cls, **initkwargs):
       # 这句话执行完成返回 view闭包函数的内存地址
       view = super().as_view(**initkwargs) # 调用父类(View)的as_view
       view.cls = cls
       view.initkwargs = initkwargs
       view=csrf_exempt(view)  # 局部禁用csrf
       return view

# 装饰器的使用方式
@csrf_exempt   ====>view=csrf_exempt(view)
def view():
   pass

# 请求来了,会执行上面返回的view()---->self.dispatch(APIView的dispatch)


# APIView的dispatch方法
   def dispatch(self, request, *args, **kwargs):
# 把原生的request,封装进新的Request对象(drf的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(),
                                 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

 

 

posted @ 2021-01-05 11:56  投降输一半!  阅读(211)  评论(0)    收藏  举报