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

Django REST framework 数据处理api的更多相关文章

  1. Django Rest FrameWork 全部API

    Django Rest FrameWork .Requests 请求 客服端发送给服务器的请求 .Responses 响应 rest框架支持响应不同格式的内容 .Views 视图 base基础类视图 ...

  2. Django REST framework 之 API认证

    RESTful API 认证 和 Web 应用不同,RESTful APIs 通常是无状态的, 也就意味着不应使用 sessions 或 cookies, 因此每个请求应附带某种授权凭证,因为用户授权 ...

  3. 快用Django REST framework写写API吧

    Django默认是前后端绑定的,提供了Template和Form,现在流行前后端分离项目,Python大佬坐不住了,于是便有了Django REST framework:https://github. ...

  4. 15 Django REST Framework 给api添加自定义搜索条件

    一.ListModelMixin源码 # 源码 class ListModelMixin(object): """ List a queryset. "&quo ...

  5. Django Rest Framework API指南

    Django Rest Framework API指南 Django Rest Framework 所有API如下: Request 请求 Response 响应 View 视图 Generic vi ...

  6. 用Django Rest Framework和AngularJS开始你的项目

    Reference: http://blog.csdn.net/seele52/article/details/14105445 译序:虽然本文号称是"hello world式的教程&quo ...

  7. Getting Started with Django Rest Framework and AngularJS

    转载自:http://blog.kevinastone.com/getting-started-with-django-rest-framework-and-angularjs.html A ReST ...

  8. 利用 Django REST framework 编写 RESTful API

    利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...

  9. Django REST Framework API Guide 06

    本节大纲 1.Validators 2.Authentication Validators 在REST框架中处理验证的大多数时间,您将仅仅依赖于缺省字段验证,或在序列化器或字段类上编写显式验证方法.但 ...

随机推荐

  1. Email-ext plugin

    https://wiki.jenkins.io/display/JENKINS/Email-ext+plugin General This plugin extends Jenkins built i ...

  2. P1196 [NOI2002]银河英雄传说(并查集)

    P1196 [NOI2002]银河英雄传说(并查集) 本题关键 用两个一维数组表示了一个稀疏的二维数组. 这两个一维数组一个表示祖先(就是最前面那个),一个表示距离祖先的距离. 并且还有一个关键点是, ...

  3. JeePlus:代码生成器-生成示例(操作)

    ylbtech-JeePlus:代码生成器-生成示例(操作) 1.返回顶部 1. 生成示例由以下部分组成 单表 主附表 树表 富文本 图片管理 自定义树组件 自定义Grid 多对多 左树右表 2. 2 ...

  4. 错误: 实例 "ruiy" 执行所请求操作失败,实例处于错误状态。: 请稍后再试 [错误: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)].

    错误: 实例 "ruiy" 执行所请求操作失败,实例处于错误状态.: 请稍后再试 [错误: 'ascii' codec can't decode byte 0xe6 in posi ...

  5. bzoj1880: [Sdoi2009]Elaxia的路线(spfa,拓扑排序最长路)

    1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1944  Solved: 759[Submit][St ...

  6. [App Store Connect帮助]六、测试 Beta 版本(4.4) 管理 Beta 版构建版本:停止测试构建版本

    在首页上,点按“我的 App”,选择您的 App,然后在工具栏中点按“TestFlight”. 在左列中的“构建版本”下,点按您 App 的平台(iOS 或 Apple TVOS). 在右表中,点按该 ...

  7. 【杂文】虚拟键码表(供函数GetAsyncKeyState()使用)

    [杂文]虚拟键码表(供函数GetAsyncKeyState()使用) 什么?你说你不知道 \(GetAsyncKeyState()\) ?\(→\)戳我\(←\) (惊奇的发现 \(0\) ~ \(9 ...

  8. 2017杭电多校第七场1011Kolakoski

    Kolakoski Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Tota ...

  9. 思维/构造 HDOJ 5353 Average

    题目传送门 /* 思维/构造:赛后补的,当时觉得3题可以交差了,没想到这题也是可以做的.一看到这题就想到了UVA_11300(求最小交换数) 这题是简化版,只要判断行不行和行的方案就可以了,做法是枚举 ...

  10. 构造 Codeforces Round #275 (Div. 2) C. Diverse Permutation

    题目传送门 /* 构造:首先先选好k个不同的值,从1到k,按要求把数字放好,其余的随便放.因为是绝对差值,从n开始一下一上, 这样保证不会超出边界并且以防其余的数相邻绝对值差>k */ /*** ...