程序员的资源宝库

网站首页 > gitee 正文

drf1(drf1609h)

sanyeah 2024-04-01 11:50:01 gitee 3 ℃ 0 评论

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。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表