restframework
- 文档:
- django-rest-framework-simplejwt:
https://django-rest-framework-simplejwt.readthedocs.io/en/latest/
- 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这个模板