Day 21 drf介绍以及安装应用

Day 21 drf介绍以及安装应用

一、什么是DRF

Django RESF framework 是一个开源的django扩展,提供了便捷的REST API 开发框架,拥有以下特性;

  • 直观的API web 界面。
  • 多种身份认证和权限认证方式的支持。
  • 内置了OAuth1 和 OAuth2 的支持
  • 内置了限流系统
  • 根据Django ORM 或者其他库自动序列化
  • 丰富的定制层级:函数视图、类视图、视图集合到自动生成API,满足各种需要
  • 可扩展性,插件丰富
  • 广泛使用,文档丰富

二、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格式字符串即可

三、API 接口

  • 1 /books/—>返回json格式数据—>/books/就是一个api接口
  • 2 开放的api接口
    -微博
    -百度
  • 3 api文档(前端开放看的)
  • 4 典型的api接口
    -https://api.weibo.com/2/statuses/home_timeline.json

四、postman的使用

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

五、drf的安装和使用

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

六、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

猜你喜欢

转载自blog.csdn.net/A1L__/article/details/109485070