首先先大致概括一下使用流程,因为还不是对这个框架很熟悉(其实有很多知识可以对比formModel的)

其实还是遵循django的MTV的模式,还是得从url开始

1、rest_framework有一个路由的写法,向下面这样

router = DefaultRouter()

router.register(r'procurements',view.ProcurementViewSet)

urlpatterns = [

  url(r'^',include(router.urls)),

  url(r'^api-auth/',include('rest_framework.urls',namespace='rest_framework')),

  url(r'my_P/$',views.My_P_M_ProductList.as_views()),

  url(r'list/$',views.product_list_frame,name='product_list_frame'),

]^

2、视图通常使用的是viewset类,然后在类名下面定义序列化,以及权限,或者过滤器,其中要使整个框架跑起来,一定要使用序列化,这个是必须的

然后使用其他的功能的话,就在序列化的下面定义相应的功能,有些函数是默认的,只需要重写,在需要使用的位置会被自动调用

类似于这段函数

class ProcurementViewSet(viewsets.ModelViewSet):
queryset = Procurement.objects.all()
serializer_class = ProcurementSerializer
def get_queryset(self):
sum_procurement = Procurement.objects.all()
quoted_procurements_list = Procurement.objects.annotate(quote_count=Count('quote')).filter(quote_count__gt=0)
has_closed = Procurement.objects.filter(ptype=2)
has_not_quote = list(set(sum_procurement).difference(quoted_procurements_list))
has_not_quote = list(set(has_not_quote).difference(has_closed))
# return sum_procurement
return {'sum_procurement':sum_procurement,'quoted_procurements_list':quoted_procurements_list,'has_closed':has_closed,'has_not_quote':has_not_quote}
def list(self, request, *args, **kwargs):
baseQueryset = self.get_queryset()["sum_procurement"]
if request.query_params.has_key('request_page') and request.query_params.has_key('max_line'):
request_page = int(request.query_params['request_page'])
max_line = int(request.query_params['max_line'])
max_page = baseQueryset.count() / max_line
if baseQueryset.count() % max_line > 0:
max_page += 1
if request_page <= max_page:
start = max_line * (request_page - 1)
end = start + max_line
baseQueryset = baseQueryset[start:end]
quotedproset = self.get_queryset()["quoted_procurements_list"]
closeproset = self.get_queryset()["has_closed"]
notquotedproset = self.get_queryset()["has_not_quote"]
serializer = ProcurementSerializer(baseQueryset, many=True)
serializerquoted = ProcurementSerializer(quotedproset,many=True)
serializerclosed = ProcurementSerializer(closeproset,many=True)
serializernotquoted = ProcurementSerializer(notquotedproset,many=True)
if request.query_params.has_key('request_page') and request.query_params.has_key('max_line'):
return Response({'serializerdata': serializer.data, 'max_page': max_page})
elif request.query_params.has_key('quoted'):
return Response({'serializerquoted':serializerquoted})
elif request.query_params.has_key("closed"):
return Response({'serializerclosed':serializerclosed})
elif request.query_params.has_key('notquoted'):
return Response({'serializernotquoted':serializernotquoted})
3、序列化的定义类似于下面的代码
class ProcurementSerializer(serializers.ModelSerializer):
class Meta:
model = Procurement
权限的定义类似于下面的代码
class IsOwnerOrReadOnly( permissions.BasePermission):

   def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS: #GET/HEAD/OPTIONS
return True
return obj.from_whom.member == request.user 总结起来的意思就是url,视图(好几种不同的写法),还有序列化取数据,是功能基本使用的最基本的用法,其他的只要相应的在上面加就可以了
部分功能参考链接:http://www.hi-roy.com//2016/06/27/django-REST-framework%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%E6%95%99%E7%A8%8B/

rest_framework使用完之后的简单总结的更多相关文章

  1. 傻瓜看完都可以简单使用Git

    作为当下最流行的版本控制系统,Git是一个分布式版本控制系统,跟SVN等集中式版本控制有很多使用上的不同.万事开头难,想要最快学会使用Git,最简单的就是下了客户端就直接去用,一边用一边学.本文手把手 ...

  2. 【Nginx】如何格式化日志并推送到远程服务器?看完原来很简单!!

    写在前面 Nginx作为最常用的反向代理和负载均衡服务器,被广泛的应用在众多互联网项目的前置服务中,很多互联网项目直接将Nginx服务器作为整个项目的流量入口.这就使得我们可以通过对Nginx服务器日 ...

  3. java生成简单Excel工作薄

    前言: 代码都是建立在实际需求上的,上周做完一个调外部电影券接口的项目,这周产品又要excel表格,大致内容为:券所属影院.图片URL.等信息制作为excel表格,把每次同步过来的数据给他分析. jx ...

  4. 老司机实战Windows Server Docker:4 单节点Windows Docker服务器简单运维(下)

    上篇中,我们主要介绍了使用docker-compose对Windows Docker单服务器进行远程管理,编译和部署镜像,并且设置容器的自动启动.但是,还有一些重要的问题没有解决,这些问题不解决,就完 ...

  5. idea自我使用简单使用方式和出现的一些简单问题以及常用快捷键

    首先配置完Idea的简单使用步骤后,今天在使用Idea时,一直持续提示web项目404的错误提示,因为之前使用idea时,部署的是springBoot的项目,使用的是SpringBoot自带的Tomc ...

  6. JXLS 2.4.0系列教程(一)——最简单的模板导出

    Java中实现excel根据模板导出数据的方法有很多,一般简单的可以通过操作POI进行.还可以使用一些工具很轻松的实现模板导出.这些工具现在还在维护,而且做得比较好的国内的有easyPOI,国外的就是 ...

  7. UDP通信简单 小结

    Android手机版和电脑版 效果图: 通过WiFi局域网 电脑和手机连接通信. 电脑版本和手机版本使用了相同的消息发送头协议, 可以相互接收消息. 若有做的不好的地方还希望大家指导一下. 1. 手机 ...

  8. 简单的利用nginx部署前端项目

    网上有很多教程写的一大堆东西,新手可能会有点看不懂,现在我写这篇文章是为了更好的帮助新手,如何将自己的前端项目部署到自己的服务器上. 首先我们必须要有一台自己的ubuntu服务器,如果没有可以去阿里云 ...

  9. java反射(四)--反射与简单java类

    一.传统简单java类 简单的java类主要是由属性所组成,并且提供有相应的setter以及getter的处理方法,同时简单java类最大的特征就是通过对象保存相应的类的属性内容,但是如果使用传统的简 ...

随机推荐

  1. cisco笔记

    交换机 show cdp neighbors 显示邻居信息 路由 show ip interface brief 显示接口ip

  2. Spyder如何在弹出框绘图【转】

    本文转载自:https://blog.csdn.net/weixin_39231685/article/details/81028833 Spyder绘图默认出现在console面板,图片无法放大,看 ...

  3. CentOS 7安装Xfce和VNC

    很多VPS商提供的CentOS 7镜像只有最小化安装,这样就只能在命令行下操作,如果要调试代码的话,还是图形化界面方便,而且CentOS自带的Gnome和KDE都比较占内存.启动桌面后就占用了400M ...

  4. CA认证_demo

    CA认证,即电子认证服务 [1]  ,是指为电子签名相关各方提供真实性.可靠性验证的活动. 证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构.是负责发放和管理数字 ...

  5. 【bzoj5427】最长上升子序列(贪心+LIS)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5427 因为noip,博客咕了好久,这几天集中填一下坑. 这题我们可以假设往不确定的空位 ...

  6. Python学习(二)——深度学习入门介绍

    课程二:深度学习入门 讲师:David (数据分析工程师) 这门课主要介绍了很多神经网络的基本原理,非常非常基础的了解. 零.思维导图预览:                一.深度神经网络 1.神经元 ...

  7. Pandas可视化

    基本绘图:绘图 Series和DataFrame上的这个功能只是使用matplotlib库的plot()方法的简单包装实现.参考以下示例代码 - import pandas as pd import ...

  8. Windows下使用MinGW在命令行编译运行C++程序

    之前学习C语言的时候都是用IDE类似CodeBlocks的工具写完直接编译运行的,今天突然心血来潮,自己下一个编译器,在命令行下,编译运行C++程序,了解一下编译过程. 一.安装编译器 首先你需要下载 ...

  9. 分步引导中,Js操作Cookie,实现判断用户是否第一次登陆网站

    上一篇介绍了分布引导插件IntroJs的使用,本篇介绍通过Js操作cookie的方法. 分步引导的功能只适合与第一次登陆网站的新用户,不能每次登陆都提示分布引导,那么如何判断用户是否第一次登录网站呢? ...

  10. 今夜我们一起学习 Apache Shiro

    简介 Apache Shiro 是一个功能强大但又非常容易使用的 Java 安全框架,提供了认证,授权,加密以及会话管理功能.因为 Shiro 的 API 是非常容易理解的,所以使用 Shiro 你可 ...