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 渲染器可以使返回的数据在浏览器以更清晰的形式展示,一下就能看出数据整体结构,加快开发速度。实际生产环境记得去掉。
Django REST framework 数据处理api的更多相关文章
- Django Rest FrameWork 全部API
Django Rest FrameWork .Requests 请求 客服端发送给服务器的请求 .Responses 响应 rest框架支持响应不同格式的内容 .Views 视图 base基础类视图 ...
- Django REST framework 之 API认证
RESTful API 认证 和 Web 应用不同,RESTful APIs 通常是无状态的, 也就意味着不应使用 sessions 或 cookies, 因此每个请求应附带某种授权凭证,因为用户授权 ...
- 快用Django REST framework写写API吧
Django默认是前后端绑定的,提供了Template和Form,现在流行前后端分离项目,Python大佬坐不住了,于是便有了Django REST framework:https://github. ...
- 15 Django REST Framework 给api添加自定义搜索条件
一.ListModelMixin源码 # 源码 class ListModelMixin(object): """ List a queryset. "&quo ...
- Django Rest Framework API指南
Django Rest Framework API指南 Django Rest Framework 所有API如下: Request 请求 Response 响应 View 视图 Generic vi ...
- 用Django Rest Framework和AngularJS开始你的项目
Reference: http://blog.csdn.net/seele52/article/details/14105445 译序:虽然本文号称是"hello world式的教程&quo ...
- Getting Started with Django Rest Framework and AngularJS
转载自:http://blog.kevinastone.com/getting-started-with-django-rest-framework-and-angularjs.html A ReST ...
- 利用 Django REST framework 编写 RESTful API
利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...
- Django REST Framework API Guide 06
本节大纲 1.Validators 2.Authentication Validators 在REST框架中处理验证的大多数时间,您将仅仅依赖于缺省字段验证,或在序列化器或字段类上编写显式验证方法.但 ...
随机推荐
- POJ3528 HDU3662 三维凸包模板
POJ3528 HDU3662 第一道题 给定若干点 求凸包的表面积,第二题 给定若干点就凸包的面数. 简单说一下三维凸包的求法,首先对于4个点假设不共面,确定了唯一四面体,对于一个新的点,若它不在四 ...
- softmax function in c++
#include <iostream> #include <vector> #include <cmath> #include <algorithm> ...
- CentOS下实现Flask + Virtualenv + uWSGI + Nginx部署
一.项目简介 在本文中,将一步一步搭建一个简单的Flask + Virtualenv + uWSGI + Nginx 架构的Web服务,可以作为新手的学习也可作为记录备忘. 如果你安装好了环境并有一定 ...
- SQL Server2012 T-SQL基础教程--读书笔记(1-4章)
SQL Server2012 T-SQL基础教程--读书笔记(1-4章) SqlServer T-SQL 示例数据库:点我 Chapter 01 T-SQL 查询和编程背景 1.3 创建表和定义数据的 ...
- 牛客网NOIP赛前集训营 提高组(第七场)
中国式家长 2 链接:https://www.nowcoder.com/acm/contest/179/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K, ...
- Extjs6 经典版 combo下拉框数据的使用及动态传参
Extjs的下拉框,在点击的时候会请求一次数据,我们可不可以在点击前就请求好数据,让用户体验更好呢?答案当然是肯定的.如果是公用的下拉框还可以传入不同参数请求不同数据. 第一步: 进入页面前首先加载s ...
- Linux重启和关机命令
Linux重启命令: 方式1:shutdown –r now 方式2:reboot Linux关机命令: shutdown –h now
- redis在linux环境下的安装与启动
定义 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted s ...
- python程序展现图片
突然想写一个python程序能够显示图片的 ,展示文字的已经实现了 现在就搞一搞这个吧 相信也是很简单 首先是放一张图片在e盘下面 等会程序打包的时候将会用到 就决定是你啦 皮卡丘: 然后就写代码吧:
- js执行顺序——学习笔记
我们知道有个全局的 window对象,js的一切皆window上的属性和方法.window上有个window.document属性,记录了整个html的dom树,document是顶层. body 和 ...