Python之Django rest_Framework(3)

补充:

 为什么要前后端分离:

      a、因为前端它有自己框架,这样它的效率就非常高

      b、不做前后端分离,公司如果既有客户端,又有app这种情况下你就的写两遍

django restful框架好处:

      帮助我们写了好多组件比如:

      a、认证:有类,类中的方法authenticate/authenticate_header,它的返回值有None,元组,异常。如果返回值为None那就不管,它是匿名用户。

      b、权限:有类,类中的方法:has_permission

      c、节流:有类,类的方法:allow_request,在这里allow_request来表示限制,它是通过IP来限制,

                      它的内部原理是:默认是IP,用户来用IP,这个IP可能代理IP,IP或者是代理IP拿着请求头默认放到大家能够的缓存中                          去,每一个人的IP为p,后面的那个列表存它的方位时间,每一次请求进来获取它的当前时间根据时间的个数来比较,在                        比较的过程中看看把不符合时间的个数来进行比较,能访问就继续,不能访问就不要继续。

      d、版本:是url和hostname,他们两个钟每一个都有两个方法一个是帮你拿版本另一个是帮你反向生成url

      e、解析器:用户发过来的请求体数据进行操作

      f、序列化:两个功能:序列化,校验

一、分页

分页的三种情况:

       a、记录当前访问页的数据id

       b、最多显示120页

       c、对页码进行加密

a、基于limit offset做分页

class P1(LimitOffsetPagination):

                max_limit = 3
                default_limit = 2
                limit_query_param = ‘limit‘
                offset_query_param = ‘offset‘

            class IndexView(views.APIView):
                def get(self,request,*args,**kwargs):
                    user_list = models.UserInfo.objects.all()
                    p1 = P1()
                    page_user_list = p1.paginate_queryset(queryset=user_list, request=request, view=self)
                    ser = IndexSerializer(instance=page_user_list, many=True)
                    return Response(ser.data) # 不含上一页和下一页
                    # return p1.get_paginated_response(ser.data) # 含上一页和下一页

            class IndexView(views.APIView):
                def get(self,request,*args,**kwargs):
                    ret = BaseResponse()
                    try:
                        user_list = models.UserInfo.objects.all()
                        p1 = P1()
                        page_user_list = p1.paginate_queryset(queryset=user_list,request=request,view=self)
                        ser = IndexSerializer(instance=page_user_list,many=True)
                        ret.data = ser.data
                        ret.next = p1.get_next_link()
                    except Exception as e:
                        ret.code= 1001
                        ret.error = ‘xxxx错误‘
                    return Response(ret.__dict__)

 b. 基于页码的分页

class P2(PageNumberPagination):
                # 每页显示的数据条数
                max_page_size = 5
                page_size = 2
                page_size_query_param = ‘size‘

                # 页码
                page_query_param = ‘page‘

c. 基于Cursor的分页

class P3(CursorPagination):
                cursor_query_param = ‘cursor‘
                page_size = 2
                ordering = ‘id‘

二、视图

1、APIView

class IndexView(views.APIView):
                    def get(self, request, *args, **kwargs):
                        user_list = models.UserInfo.objects.all()
                        ser = IndexSerializer(instance=user_list,many=True)
                        return Response(ser.data)

2、GenericAPIview(APIView)

3、GenericViewSet(ViewSetMixin,generics.GenericAPIView)

路由修改:
                    urlpatterns = [
                        url(r‘^index/$‘, views.IndexView.as_view({‘get‘:‘list‘,‘post‘:‘create‘})),
                        url(r‘^index/(?P<pk>\d+)$‘, views.IndexView.as_view({‘get‘:‘retrieve‘})),
                    ]

                视图修改:

                    class IndexView(viewsets.GenericViewSet):

                        def list(self,request,*args,**kwargs):

                             pass # 获取列表信息

                        def retrieve(self, request, *args, **kwargs):
                            pass  # 获取单条数据

                        def create(self,request, *args, **kwargs):
                            pass

                自定义:

                        增
                            POST
                            /users/
                        删
                            DELETE
                            /users/1/
                        改
                            PUT
                            /users/1/

                            patch
                            /users/1/
                        查
                            GET
                            /users/
                            GET
                            /users/1/

                        urlpatterns = [

                            url(r‘^index/$‘, views.IndexView.as_view()),
                            url(r‘^index/(?P<pk>\d+)$‘, views.IndexView.as_view()),
                        ]

                        class IndexView(views.APIView):

                            def get(self,request,*args,**kwargs):
                                pk = kwargs.get(‘pk‘)
                                if pk:
                                    pass # 获取单条信息
                                else:
                                    pass # 获取列表信息

                            def post(self,request,*args,**kwargs):
                                pass

                            def put(self,request,*args,**kwargs):
                                pass

                            def patch(self,request,*args,**kwargs):
                                pass

                            def delete(self,request,*args,**kwargs):
                                pass

4、ModelViewSet

 

原文地址:https://www.cnblogs.com/mengqingjian/p/8431724.html

时间: 2024-10-31 17:48:36

Python之Django rest_Framework(3)的相关文章

Python之Django rest_Framework(2)

实例化: v1 = ["view.xxx.path.Role","view.xxx.path.Group",] 可以循环,循环出来的每一个不能实例化 如果把v1循环弄成每一个对象列表,通过rsplit切割,在通过importlib.import_module拿到每一个路径,在通过getattr把它的类名拿过来,这个类加括号就是实例化想 for item in v1: m = importlib.import_module('view.xxx.path') cls =

python之Django rest_framework总结

一.rest api    a.api就是接口         如: - http://www.oldboyedu.com/get_user/                - http://www.oldboyedu.com/get_users/    b.api的两个用途         1.为别人提供服务         2.前后端分离 二.restful     a.--字面意思:表征状态转移     b.面向资源编程,对互联网上的任意东西都视为资源          如:- http:

Django rest_framework实现增删改查接口

目录 Django rest_framework实现增删改查接口 写接口前的知识准备 __all__的使用方法 序列化类配置 Response二次封装 连表深度查询 单查群查接口 单删群删接口 单增,群增接口 整体单改群改接口 局部修改数据 视图给序列化传参 Django rest_framework实现增删改查接口 本文使用Django的rest_framework框架的ModelSerializer模块和ListSerializer模块实现单查群查.单删群删.单增群增.单改群改接口. 写接口

Python和Django的Third Libraby分类汇总

这些第三方包与Python和Django一起构成了强大的生态系统,自己在开发时大大减小工作难度和工作量, 这些包基本上能满足我们的大部分需求.人与人的差距,其中一点是你知道的比他多,这样你就能大大提高 开发效率.Awesome-Python受Awesom-PHP的启发,而Awesome-Django又受Awesome-Python的启 发. https://github.com/vinta/awesome-python https://github.com/rosarior/awesome-dj

Django rest_framework 实用技巧

前言: 最近工作中需要用到Django rest_framework框架做API, 边学边写,记录了一些实际工作中需要用到的功能,不是很全也不系统,以后需要什么功能可以在这查询. 后续还会更新其它的用法 1 #################################################################### 2 ########安装和简单使用 3 ###### 准备工作 4 pip install rest_framework # 安装 5 6 INSTALL

Python、Django和Mysql安装步骤

很多初学者都问Python和Django怎么安装,这里我们就简单地介绍一下这两个软件在Windows 2003下的安装步骤. 一.下载并安装Python Python 官方下载地址:http://www.python.org/ftp/python/ 我们这里选择的是 Python 2.7.2 .虽然目前最新版是Python 3.2.2, 但是Django目前还不支持 Python 3.2.2. 安装步骤很简单,双击安装包开始安装,这里我们安装到 D:\Python,如图1, 图1 单击“Next

[Python] 利用Django进行Web开发

第一步:下载并安装django 首先,在Django官网上下载适合自己Python的Django版本,在安装Django前首先确定你已成功安装了python.         Windows系统下安装Django: 解压缩下载的Django压缩包,找到里面的setup.py文件,然后打开cmd命令窗口,在其对应的路径下执行如下命令: python setup.py install Linux系统下安装Django: 以此在shell中输入如下命令: $ tar xzvf Django-*.tar

python web——Django架构

环境:windows/linux/OS 需要的软件:Firefox 浏览器(别的也可以 不过firfox和python的webdriver兼容性好) git版本控制系统(使用前要配置 用户 编辑器可以用系统的 notepad) python包管理工具pip(3.4以及之后的版本在python中集成了 3.4以前的需要安装 命令行中执行which pip3 返回路径即表示安装完成) python(在安装时选择把 python.exe加入系统路径中) Django 1.11 (命令行pip3 ins

django rest_framework中将json输出字符强制为utf-8编码

最近在和日本外包合作开发JIRA对接发布系统的版本单时, 遇到这个问题. 就是我们这边的输出浏览器显示为中文,而到了JIRA端就出现乱码. 查了文档,原来django rest_framework的默认json是没指定编码的, 需要随接收方的环境编码来显示. 于是,因为项目进度,我们对了强制编码操作. 查看rest framework的源代码: class JSONRenderer(BaseRenderer): """ Renderer which serializes to