django-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 1637482
  • 博文数量: 63
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 646
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-26 18:02
个人简介

祸兮福之所倚,福兮祸之所伏

文章分类

全部博文(63)

文章存档

2020年(11)

2019年(10)

2017年(10)

2016年(25)

2015年(7)

我的朋友
相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: python/ruby

2020-06-22 17:07:26

     django-rest-framework是基于django框架封装的一层更高级的框架,非常适合做后台接口,这里主要说一下请求的传递,看rest框架是如何让我们的代码写的更方便。
    安装配置前文已经讲过,这里不再重复。请求的部分这里主要说两个方式。
     传统的django请求方式是要根据request.method 的方法名进行判断是get还是post等,但是在这里就不需要了,rest框架已经量身定制好了。
   第一种使用http action进行对应的函数名进行处理,内容处理逻辑全部自己处理,附上各种方式获取的请求参数:
    上views代码

点击(此处)折叠或打开

  1. from rest_framework.views import apiview #导入api类

  2. class rest(apiview):
  3.        #请求get方法就由此函数处理
  4.        def get(self, request):
  5.               #输出请求的数据
  6.               print request.query_params
  7.               #以json格式返回
  8.               return jsonresponse(request.query_params)
  9.        
  10.        #请求post方法由此函数处理
  11.        def post(self, request):
  12.               #输出请求数据
  13.               print request.data
  14.               return jsonresponse(request.data)
    上url代码,view调用方式
  

点击(此处)折叠或打开

  1. from views.import rest

  2. #将url跟view对应
  3. urlpatterns  = [
      ),
  4. ]
        
    
    第二种常用于跟数据库交互。基本流程为  view <--> serializers <--> model <--> orm <--> mysql(或者别的数据)
    views.py  view函数为对机器信息表的增删查改  
根据设置每页展示数据,如无特殊需求可直接继承使用 modelviewset,使用序列化为 get_serializer_class

    

点击(此处)折叠或打开

  1. from rest_framework.filters import searchfilter
  2. from rest_framework.authentication import tokenauthentication 
  3. import django_filters
  4. from rest_framework.permissions import isauthenticated
  5. 
    			
  6. class cmdbmachineinfoviewset(viewsets.modelviewset, cmdb_machine_info.utils):  
  7.     # 定义检索的后端驱动             
  8.     filter_backends = (django_filters.rest_framework.djangofilterbackend, searchfilter)  
  9.     # 定义检索的表中字段, 其中project__id为外键索引         
  10.     filter_fields = ('status', 'project__id','account'
  11.     # 定义搜索的字段 在http中通过增加search参数,可以查询设置字段中的值                  
  12.     search_fields = ('id','hostname','id')      
  13.     # 设置接口使用认证方式,主要有token,session,用户名密码登录等方式         
  14.     # authentication_classes =(tokenauthentication,)   
  15.     # 设置认证用户是否有权限访问                                         
  16.     # permission_classes =(isauthenticated,)      

  17.     
  18.     def get_serializer_class(self):     
  19.         return self.get_serializer_list()

  20.     def get_queryset(self):             # 定义所需list返回的列表,并定义每页所需展示的数据
  21.         page_size = 15
  22.         if self.request.get.get('page_size'):
  23.             page_size = self.request.get.get('page_size')
  24.         self.pagination_class.page_size = page_size
  25.         return self.get_model().objects.all()

  26.     #返回全部表数据,根据设置每页展示数据,如无特殊需求可直接继承使用 modelviewset
  27.     # def list(self, request, *args, **kwargs):      
  28.         # queryset = self.filter_queryset(self.get_queryset())         
  29.         # page = self.paginate_queryset(queryset)
  30.         # if page is not none:
  31.             # serializer = self.get_serializer(page, many=true)        
  32.             # return self.get_paginated_response(serializer.data)
  33.         # serializer = self.get_serializer(queryset, many=true)
  34.         # return response(serializer.data)
  35.         
  36.     # def retrieve(self, request, *args, **kwargs):          # 使用自定义序列化返回数据
  37.         # self.serializer_class = self.get_serializer_retrieve()
  38.         # return super(cmdbmachineinfoviewset, self).retrieve(self, request, *args, **kwargs)
  39.         # return viewsets.modelviewset.retrieve(self, request, *args, **kwargs)

  40.     def create(self, request, *args, **kwargs):             #使用自定义序列化创建数据
  41.         retdict = self.save_utils("create", request.data)
  42.         if 'instance' in retdict: retdict.pop('instance')
  43.         return jsonresponse(retdict, status=200)
  44.     
  45.     def update(self, request, *args, **kwargs):           # 使用自定义序列化更新数据
  46.         instance = self.get_object()                     #获取当前数据实例,为当前数据记录
  47.         retdict = self.save_utils("update", request.data, instance=instance)        
  48.         if 'instance' in retdict: retdict.pop('instance')
  49.         return jsonresponse(retdict, status=200)
    url 调用
    

点击(此处)折叠或打开

  1. from rest_framework import routers                    #使用默认路由模式

  2. router = routers.defaultrouter()
  3. router.register(r'machineinfo', cmdbmachineinfoviewset, base_name='cmdb_machine_info')         #调用view函数
    以上介绍两种rest framework 框架常用的两种view模式, 如需有数据库操作则推荐使用modelviewset
readonlymodelviewset 或者自定义权限。


      


       

    
      
阅读(7162) | 评论(0) | 转发(0) |
0

上一篇:vue组件之间通信

下一篇:将博客搬至csdn

给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图