************************** 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 参考资料: .. toctree:: :maxdepth: 2 :caption: 参考阅读 视图家族 Generics 与 Viewsets APIView、GenericAPIView、GenericViewSet的原理分析 瞧瞧别人家的API接口,那叫一个优雅! 后端设计好接口的36个锦囊! .. include:: contributor 渐进式开发 ========================= 第一阶段:@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文档`_ .. _Django文档: https://docs.djangoproject.com/zh-hans/3.2/topics/class-based-views/intro/#using-class-based-views 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 .. _django文档-Web请求的认证: https://docs.djangoproject.com/zh-hans/3.2/topics/auth/default/#authentication-in-web-requests 怎么定位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 第三方插件 ================================================================ .. toctree:: :maxdepth: 2 jwt