restframework

文档:

https://www.django-rest-framework.org/

django-rest-framework-simplejwt:

https://django-rest-framework-simplejwt.readthedocs.io/en/latest/

bilibili-restframework:

https://gitee.com/luzhenxiong/bilibili-restframework

参考资料:

渐进式开发

第一阶段:@api_view

函数式编程

第二阶段:APIView

  • 自动实现了限流、用户认证等功能

  • 需要自己处理object、queryset、serializer等对象

第三阶段:GenericAPIView

  • 提供了get_object、get_queryset、get_serializer三个方法

  • 需要自己实现增删查改方法

第四阶段:GenericAPIView+Mixin

  • 自动实现了增删查改方法

  • 需要自己实现get、post、delete、put等动作

第五阶段:GenericAPIView+APIView衍生类

  • 自动实现了get、post、delete、put等动作

第六阶段:视图集ViewSet及衍生类

  • 可应用于路由对象

快速开始

文档: https://www.django-rest-framework.org/tutorial/quickstart/

快速开始 文档做了什么内容?

  • 创建Django项目

  • 编写序列化内容 - 新建serializers.py文件,编写序列化代码

  • 编写视图内容 - 在views.py文件编写视图代码,这里从rest_framework.viewsets.ModelViewSet继承

  • 设置路由

  • 修改settings.py配置文件

  • 启动django项目并测试api

序列化内嵌json

官方文档 已经有很详细的介绍:

常见疑问

为什么要用drf, 直接用django不行吗

因为很多东西都封装好了

  • The Web browsable API is a huge usability win for your developers.

  • Authentication policies including packages for OAuth1a and OAuth2.

  • Serialization that supports both ORM and non-ORM data sources.

  • Customizable all the way down - just use regular function-based views if you don’t need the more powerful features.

  • Extensive documentation, and great community support.

  • Used and trusted by internationally recognised companies including Mozilla, Red Hat, Heroku, and Eventbrite.

APIView、GenericView、ModelViewSet怎么选择?

  • View和ViewSet之间优先选择ViewSet(封装程度更高)

  • 需要操作模型时,选GenericView(自动实现crud接口),不需要操作模型时选APIView。

快速开始中,router.register(r’users’, views.UserViewSet)这行代码是调用了哪个处理方法?

rest_framework.views.APIView.dispatch

这涉及到 基于类的视图 方面的内容,可查阅 Django文档

api界面表单部件如何设置密码类型?

在serializers.py文件中的序列化类属性这样写:

password = serializers.CharField(
    style={'input_type': 'password'}
)

HyperlinkedModelSerializer和ModelSerializer的区别

前者使用url代替id, 其它没区别

处理http请求时是怎么做用户验证的?

django文档-Web请求的认证 有提及这个。 使用Django自带的用户验证系统,通过request.user.is_authenticated来判断。 使用django的login函数使is_authenticated变成True,调用logout函数则变成False

怎么定位api浏览的模板?

可以从rest_framework/routers.py的APIRootView作为入口:

  • APIRootView继承自views.APIView

  • 查看views.APIView的renderer_classes属性(api_settings.DEFAULT_RENDERER_CLASSES)

  • 查看rest_framework/setting.py的DEFAULTS[“DEFAULT_RENDERER_CLASSES”]

  • 查看rest_framework.renderers.BrowsableAPIRenderer的template属性即可知道是用了rest_framework/index.html这个模板

跨域

https://blog.csdn.net/paul0926/article/details/90727620

https://github.com/adamchainz/django-cors-headers

第三方插件