尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Python-100-Days RESTful API开发实战:6步搞定DRF接口设计与JWT认证

Python-100-Days RESTful API开发实战:6步搞定DRF接口设计与JWT认证 Python-100-Days RESTful API开发实战6步搞定DRF接口设计与JWT认证【免费下载链接】Python-100-DaysPython - 100天从新手到大师项目地址: https://gitcode.com/GitHub_Trending/py/Python-100-Days你有没有遇到过后端接口迟迟出不来、前端同学干等数据的情况本文跟着 Python-100-Days 的 RESTful 与 DRF 章节带你从零设计 RESTful API 接口用 Django REST FrameworkDRF搞定序列化、视图、JWT 认证三大块一次性把接口跑起来。动手前先搞清楚 API 到底在干嘛这节解决先懂后动的问题。你可以把 API 想象成前后端之间的取餐窗口前端来取餐发请求后端按单出餐返回数据中间不炒任何菜不写页面。HTTP 的四个动词正好对应取餐场景里的四个动作GET 是查看菜单POST 是下新单PUT 是把整张订单内容换掉DELETE 是取消订单。还有一个细节地址URI表示的是资源而不是动作所以取学生信息要写成/students/1/而不是/getStudent/1/。另外记住这个窗口是无状态的服务器不记得你是谁每次请求都得带上身份标识否则分不清哪张单是你的。明白规则后接下来跟着项目源码走一遍完整链路。30 秒跑通第一个接口这节解决把环境跑起来的问题。先在终端安装框架pip install djangorestframework然后在 settings.py 里改两处在 INSTALLED_APPS 中注册 rest_framework并新增一个 REST_FRAMEWORK 字典声明默认认证方式INSTALLED_APPS [ rest_framework, ] REST_FRAMEWORK { PAGE_SIZE: 10, DEFAULT_AUTHENTICATION_CLASSES: [ rest_framework.authentication.SessionAuthentication ] }启动项目后在浏览器里访问/api/subjects/如果能看到 DRF 调试页面上的 GET 按钮和返回的 JSON 数据说明环境 OK继续往下走。把数据翻译给前端序列化器这节解决数据库对象怎么变成前端能读的 JSON的问题。序列化器就像餐厅菜单的翻译官数据库里的模型对象是中文菜单前端只认外文菜单翻译官负责决定哪些菜端出去、哪些不翻。DRF 的 ModelSerializer 让这件事几乎零代码from rest_framework import serializers class SubjectSerializer(serializers.ModelSerializer): class Meta: model Subject fields (no, name, intro)它除了翻译还兼做校对前端提交新数据时DRF 会先按序列化器里声明的字段做校验格式不对直接拒绝脏数据根本到不了数据库。新手高频坑提醒一句图省事写fields __all__会把全部字段输出开发时很方便但生产环境里一旦表里存了密码哈希之类的敏感字段就会跟着一起泄漏。上线前务必显式列出要输出的字段。两种写视图的姿势选哪个这节解决接口逻辑写在哪的问题。DRF 给了两种姿势。函数视图FBV最直白在函数里查完数据直接返回from rest_framework.decorators import api_view from rest_framework.response import Response api_view([GET]) def show_subjects(request): subjects Subject.objects.all().order_by(no) return Response(SubjectSerializer(subjects, manyTrue).data)类视图CBV把样板工作交给父类你只声明数据怎么拿、数据怎么序列化两件事from rest_framework.generics import ListAPIView class SubjectView(ListAPIView): queryset Subject.objects.all() serializer_class SubjectSerializer两者各有脾气函数视图灵活什么逻辑都能塞进去类视图效率高但深度定制时反而更啰嗦。一句话建议接口少于 3 个就用函数视图超过 3 个、又需要某个资源完整的增删改查直接上 ModelViewSet五种方法 DRF 全帮你生成好了。不登录就能调接口安全加固这节解决服务器怎么知道是谁在请求的问题。不做认证时接口对所有人敞开而 Django 自带的 session 把用户状态存在服务器上多机器扩容时同步状态很麻烦所以更通用的方案是 JWT。你可以把它想象成三页装订在一起的文件头部记录章的类型签名算法载荷记录这张单是谁的用户标识、过期时间签名则是盖在三页上的骑缝章——谁要是偷偷改了一个字章就对不上了令牌立刻作废。装好 PyJWT 后生成和验证核心就两行token jwt.encode(payload, settings.SECRET_KEY).decode() payload jwt.decode(token, settings.SECRET_KEY)其余是套路登录成功时把用户 ID 和过期时间放进载荷、用只有服务器知道的 SECRET_KEY 签名前端之后每次请求都在请求头里带着它服务器验签不过或已过期就统一返回 401前端看到 401 直接跳回登录页。上线前检查清单这节解决上线前一晚才发现漏了东西的问题逐项过一遍分页列表接口一次拉回几万条数据前端会卡死带宽也白烧按页码切分是标配过滤与排序让前端按条件只取需要的几十条而不是全量拉回来自己筛缓存高频读接口每次都打数据库会被打爆加一层缓存能大幅减压接口文档用 RAP2 或 YAPI 把接口写成文档同步给前端否则每改一个字段都要追着问人错误码规范code 和 message 统一约定前端才能精确分支处理而不是靠猜限流防止某个客户端高频轰炸接口把整个服务拖垮下一步学什么通读 54.RESTful架构和DRF入门.md跟着完整投票例子看清序列化器、视图、URL 映射是怎么串起来的在 55.RESTful架构和DRF进阶.md 里学 CBV 定制、分页器配置和 django-filter 数据筛选到 94.网络API接口设计.md 学习如何撰写规范的接口文档、设计全局错误码【免费下载链接】Python-100-DaysPython - 100天从新手到大师项目地址: https://gitcode.com/GitHub_Trending/py/Python-100-Days创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表