博客
关于我
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/

    你可能感兴趣的文章
    PostgreSQL实现shape数据转geojson数据(地图工具篇.18)
    查看>>
    PostgreSQL导入shape数据(地图工具篇.10)
    查看>>
    PostGreSql工作笔记003---在Navicat中创建数据库时报错rolcatupdate不存在_具体原因看其他博文_这里使用pgAdmin4创建管理postgre
    查看>>
    PostGreSql工作笔记004---PostGreSql修改密码_windows和linux下修改
    查看>>
    Postgresql常用命令行操作_以及Navicat操作PostGis时的问题_自动截取长度_WKB structure does not match exp---PostgreSQL工作笔记005
    查看>>
    PostgreSQL忘记密码
    查看>>
    PostgreSQL数据库pg_dump命令行不输入密码的方法
    查看>>
    PostgreSQL新手入门
    查看>>
    postgresql树状结构查询示例
    查看>>
    PostgreSQL流复制参数max_wal_senders详解
    查看>>
    postgresql流复制配置
    查看>>
    PostgreSQL清空表并保留表结构、清空数据库还原数据库为新建时的状态的方法
    查看>>
    PostgreSQL的 initdb 源代码分析之九
    查看>>
    PostgreSQL的安装与使用指南
    查看>>
    postgresql编译安装及配置
    查看>>
    Postgresql运维常用命令_登录_权限设置_创建用户_创建数据库_创建postgis数据库_远程连接---Postgresql工作笔记009
    查看>>
    PostgreSQL远程连接配置
    查看>>
    PostgreSQL远程连接,发生致命错误:没有用于主机“…”,用户“…”,数据库“…”,SSL关闭的pg_hba.conf记录
    查看>>
    PostgreSQL配置文件--AUTOVACUUM参数
    查看>>
    PostgreSQL配置文件--其他
    查看>>