• Django REST framework 数据处理api


    一、url分发

    以防有其他业务线的需要,导致url杂乱,将每个app用到的url都设置在自己的应用中。

    # 项目下的url 
    url(r"^api/(?P<version>w+)/", include("api.urls")),
    # 应用下的url
    url(r"^login/$", account.LoginView.as_view()),
    url(r"^courses/$", course.CourseViewSet.as_view({"get": "list"})),
    url(r"^course/(?P<pk>d+)/$", course.CourseViewSet.as_view({"get": "retrieve"})),

    二、获取多条数据和详细数据

    先来看一下示例用到的 model 表结构:

    从上面的url可知道,这两条接口可以用同一个CBV处理数据:

    ①课程页面,应该包含多条数据(需要分页),所以是基于 Course 表做数据处理的;

    ②课程详情页面,就应该基于 CourseDetail 表展开操作,前端要什么数据就返回什么数据,而不是返回所有数据。

    那么让我们看看用 rest_framework 的序列化做了什么:

    对于这条接口:

    http://127.0.0.1:8000/api/v1/courses/

    需要获取的数据很简单,如下:

    从model中知道,level 字段存储的是对应 level 的数字,但我们不应该给前端返回1、而是返回对应的 level 文字,所以对于 level 字段采用了 get_level_display。

    对于这条接口:

    http://127.0.0.1:8000/api/v1/course/1/

    如果需要返回的数据很多,那么对应的逻辑也就相对复杂一点,具体如下:

    那么让我们看一下这条API返回的数据吧(测试数据提前录入好了~):

    只要熟悉了这两条API数据处理方式,基本需要什么数据都能返回。

     三、登录接口

    登录成功,给用户返回token。

    在model中新增两张表:

    这里登录视图继承APIView实现,当然也可以选择其他的,逻辑如下:

    四、需要身份认证的视图

    前端逻辑:如果这个页面需要登录才能访问,则跳转到登录页面,登录成功,则会获取到后端返回的token,比如vue中使用vue-cookies保存登录成功的用户信息(包括token),然后再携带token访问这个页面的接口;

    后端逻辑:给这个视图加上身份认证即可,这个认证就可以基于token来做。

    给这个视图加上认证即可,哪个视图需要认证就在哪里加,不建议全局配置。

    如果在settings.py中配置了:

    REST_FRAMEWORK = {
        "UNAUTHENTICATED_USER": None,   # 匿名用户,request.user = None
        "UNAUTHENTICATED_TOKEN": None,  # 匿名用户,request.auth = None
    }

    在视图中,对于没有登录的用户(匿名用户),request.user 为 None,如果没设置,则显示 AnonymousUser,建议配置,简洁、更好区分。

    综上,结合API要体现接口、体现版本,最好返回JSON格式数据,所以我的 REST_FRAMEWORK 暂时配置如下:

    REST_FRAMEWORK = {
        "DEFAULT_RENDERER_CLASSES": [
            "rest_framework.renderers.JSONRenderer",
            # "rest_framework.renderers.BrowsableAPIRenderer",
        ],
        "DEFAULT_VERSIONING_CLASS": "rest_framework.versioning.URLPathVersioning",
        "VERSION_PARAM": "version",  # 参数
        "DEFAULT_VERSION": "v1",  # 默认的版本
        "ALLOWED_VERSIONS": ["v1", "v2"],  # 允许的版本
        "UNAUTHENTICATED_USER": None,
        "UNAUTHENTICATED_TOKEN": None,
    }

    在开发阶段 BrowsableAPIRenderer 渲染器可以使返回的数据在浏览器以更清晰的形式展示,一下就能看出数据整体结构,加快开发速度。实际生产环境记得去掉。

  • 相关阅读:
    编程 判断 是否满足条件 的 验证代码。
    Javascript作用域详解。
    DateTable To Json
    反射_获取字段的Description信息
    C# Json格式
    jQuery选择器
    SQL日期格式转换
    【转载】#pragma once与#ifndef
    C++中的左值与右值
    HTML、CSS基础知识
  • 原文地址:https://www.cnblogs.com/believepd/p/10256563.html
Copyright © 2020-2023  润新知