博客
关于我
drf之框架基础
阅读量:470 次
发布时间:2019-03-06

本文共 3445 字,大约阅读时间需要 11 分钟。

Django REST framework基础与流程

1. 接口(API)

定义

接口是前后台之间的桥梁,负责数据的交互。在Web程序中,接口通常连接前台页面与后台数据库,起到数据传输的作用。

组成要素

  • URL: 接口的入口地址,类似api.baidu.map/search,返回JSON数据。
  • 请求参数: 前台通过指定的key传递数据给后台,确保后台能正确提取并查询数据。
  • 响应数据: 后台与数据库交互后,将处理结果反馈给前台。

特点

  • 接口可以通过URL唯一标识。
  • 请求参数必须按规则传递,确保数据处理的准确性。
  • 响应数据需包含状态码和资源信息。

2. RESTful接口规范

核心原则

  • 使用统一的接口协议,确保不同语言系统间数据一致。
  • 接口设计要遵循REST原则,简化数据交互流程。

URL规范

  • 路径结构
    • 使用api作为接口的标识,例如api.baidu.comwww.baudu.com/api
    • 若接口有多个版本(如v1, v2),需在URL中体现,例如api.baidu.com/v1/...api.baidu.com/v2/...
    • 资源通常采用复数形式,单一资源可通过参数标识,如api.baidu.com/books/123
    1. 请求方法
      • GET: 获取数据
      • POST: 创建数据
      • PUT: 更新数据
      • PATCH: 部分更新数据
      • DELETE: 删除数据
      1. 数据操作
        • 支持筛选、排序、分页等功能,例如api.baidu.com/books/?search=宝马&ordering=-price&limit=3
        1. 响应数据规范
          • 状态码:status字段表示操作结果,0表示成功,1表示失败,2表示无匹配结果。
          • 状态信息:提供操作失败或无匹配结果的具体描述。
          • 返回数据:主要以results字段展示资源数据,特殊情况下返回数据URL

          3. Django REST Framework流程

          项目准备

        2. 路由分发
          • 在项目根目录的urls.py中包含应用路由,例如url(r'^api/', include('api.urls'))
          • 在应用目录的urls.py中定义细粒度路由,例如url(r'^books/', views.Book.as_view())
          1. 定义视图类
            • views.py中继承View类,并实现不同HTTP方法的处理逻辑。
            • 示例代码:
            from django.http import JsonResponsefrom django.views import Viewclass Book(View):    def get(self, request, *args, **kwargs):        return JsonResponse({'status': 0, 'msg': 'ok', 'results': [...]}, safe=False)        def post(self, request, *args, **kwargs):        # 处理POST请求逻辑        return JsonResponse({'status': 0, 'msg': 'ok', 'results': [...]}, safe=False)
            1. 数据库模型
              • models.py中定义数据结构,例如:
              from django.db import modelsclass Book(models.Model):    title = models.CharField(max_length=64)    price = models.DecimalField(max_digits=5, decimal_places=2)    class Meta:        db_table = 'book'        verbose_name = '书籍'
              1. 迁移与部署
                • 使用makemigrations创建迁移文件,migrate应用到数据库。
                • 通过admin.py注册模型,并创建管理员账户。

                CBV的请求生命周期

              2. 请求处理流程
                • 请求到达项目路由,经过as_view函数分发至应用路由。
                • 视图类通过dispatch方法判断请求方式,执行相应的业务逻辑。
                • 返回处理结果,例如JsonResponse
                1. 核心组件
                  • 请求组件: 解析请求参数,提取必要数据。
                  • 序列化组件: 将数据库对象转换为可传输的格式。
                  • 认证与权限: 确保请求合法性,控制访问权限。
                  • 过滤与筛选: 提供数据筛选、排序、分页功能。

                  原生接口与序列化

                  • 六大基础接口: 获取单个、获取所有、增加、删除、更新完整、更新局部。
                  • 常用接口: 支持批量操作、筛选、排序、分页等。

                  示例使用

                  • 路由定义:
                  from django.conf.urls import urlfrom . import viewsurlpatterns = [    url(r'^books/$', views.Book.as_view()),    url(r'^books/(?P
                  \d+)$', views.Book.as_view()),]
                  • 视图实现:
                  class Book(View):    def get(self, request, *args, **kwargs):        if not kwargs.get('pk'):            # 群查接口            books = Book.objects.all()            return JsonResponse({'status': 0, 'msg': 'ok', 'results': [...]}, ensure_ascii=False)        else:            # 单查接口            book = Book.objects.filter(pk=kwargs['pk']).values('title', 'price').first()            if book:                return JsonResponse({'status': 0, 'msg': 'ok', 'results': book}, ensure_ascii=False)            else:                return JsonResponse({'status': 2, 'msg': 'no results'}, ensure_ascii=False)        def post(self, request, *args, **kwargs):        try:            book = Book.objects.create(**request.POST.dict())            if book:                return JsonResponse({'status': 0, 'msg': 'ok', 'results': {'title': book.title, 'price': book.price}}, ensure_ascii=False)        except Exception as e:            return JsonResponse({'status': 1, 'msg': 'wrong params'}, ensure_ascii=False)        return JsonResponse({'status': 2, 'msg': 'created failed'}, ensure_ascii=False)

                  工具与测试

                  • Postman: 适合发送不同HTTP方法的测试请求。
                  • JsonResponse: 返回JSON数据时,需注意ensure_ascii属性,避免中文乱码。

                  总结

                  Django REST Framework通过标准化接口规范,简化了前后台数据交互流程。通过合理设计URL、请求参数和响应数据,可以构建高效、可扩展的API系统。CBV视图类的请求生命周期清晰地展示了数据处理流程,而序列化组件则确保了数据在不同系统间的互通。

    转载地址:http://nimbz.baihongyu.com/

    你可能感兴趣的文章
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty常见组件二
    查看>>
    netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
    查看>>
    Netty核心模块组件
    查看>>
    Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
    查看>>
    Netty源码—2.Reactor线程模型一
    查看>>
    Netty源码—4.客户端接入流程一
    查看>>
    Netty源码—4.客户端接入流程二
    查看>>
    Netty源码—5.Pipeline和Handler一
    查看>>
    Netty源码—6.ByteBuf原理二
    查看>>
    Netty源码—7.ByteBuf原理三
    查看>>
    Netty源码—7.ByteBuf原理四
    查看>>
    Netty源码—8.编解码原理二
    查看>>
    Netty源码解读
    查看>>
    Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
    查看>>
    Netty相关
    查看>>
    Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
    查看>>
    Network Sniffer and Connection Analyzer
    查看>>
    NetworkX系列教程(11)-graph和其他数据格式转换
    查看>>
    Networkx读取军械调查-ITN综合传输网络?/读取GML文件
    查看>>