2020-12-14 django复习和drf概况

BBS项目回顾

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
    -有名无名分组,路由分发,名称空间
    -转换器,自定义转换器
-视图Views.py
    -请求对象(HTTP请求)
    -响应对象(HTTP响应)
    -四件套
    -cbv和fbv
    -文件上传(编码方式)
-模板层Templates文件夹
    -模板语言(DTL)
    -xx.html(字符换替换)
    -变量,变量深度查询
    -标签
    -过滤器
    -自定义标签,过滤器
    -render()---》页面静态化
-模型层
    -orm:能创建表,新增删除字段,不能创建数据库
    -单表
    -数据库连接(MySQL)
    -创建表模型(字段,字段参数)
    -多表
    -三个关系
    -Meta:表名,联合索引,联合唯一,排序
    -查询方法:api
    -单表的__模糊查询
    -多表的__连表查询
    -多表基于对象的跨表查询
    -聚合
    -分组
    -F和Q
-高级部分
    -Ajax(js的,jquery的ajax方法,axios),异步,上传文件,json格式(django内置的序列化器)
    -分页器
    -forms:数据校验和模板渲染,局部,全局钩子函数(源码分析)
    -cookie和session,token,django中如何操作cookie,session
    -中间件:最重要的两个
    -Auth:django内置app,用户相关
-BBS项目(前后端混合开发)
    -django 2.0.7 + MySQL 5.6 + bootstrap 3.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接口

为了在团队形成共识,防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端些的接口,
用途一目了然,减少双方之间的合作成本。
通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介。

web API接口和一般的url链接还是有区别的,web api接口简单概括有下面四大特点。

    ·url:长得像返回数据的url链接
        https://api.map.baidu.com/place/v2/search
    ·请求方式:get、post、put、patch、delete
        采用get方式或其他方式请求上方接口
    ·请求参数:json或xml格式的key-value类型数据
        ak:6E823f587c95f0148c19993539b99295
        region:上海
        query:肯德基
        output:json
    ·响应结果:json或xml格式的数据

        上方请求参数的output参数值决定了响应数据的格式

   -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

要先去settings中注册一下rest_framework 这个app
然后要迁移一下数据,python manage.py migrate才可以通过浏览器访问drf的页面

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 版本 了解* 可以放在url,这种是比较推荐的。它需要配套的路由,一般所有的CBV都要使用,所以放在全局配...
    上帝大人阅读 1,183评论 0 1
  • 1、谈谈对http协议的认识流程:1.域名解析域名解析检查顺序为:浏览器自身DNS缓存---》OS自身的DNS缓存...
    Zzmi阅读 4,153评论 0 0
  • restframework restframework简介 它是基于Django的,帮助我们快速开发符合restf...
    DayBreakL阅读 4,193评论 0 2
  • 为什么学习Python? 通过什么途径学习的Python? 上网收集视频,资料 关注公证号 买教程,书籍 Pyth...
    130920阅读 5,092评论 0 0
  • Django 与drf 源码视图解析 一.原生Django CBV 源码分析:View 二.drf CBV 源码分...
    25岁学Python阅读 2,490评论 0 0