02 drf源码剖析之快速了解drf

1. 什么是drf

  • drf是一个基于django开发的组件,本质是一个django的app
  • drf可以为我们快速开发出一个遵循restful规范的程序。

2. 安装

pip3 install djangorestframework

3. 使用

  • 注册app

    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework'
    ]
  • 写路由

    from django.conf.urls import url
    from django.contrib import admin
    from api import views
    urlpatterns = [
    url(r'^admin/', admin.site.urls), url(r'^drf/article/$', views.ArticleView.as_view()),
    url(r'^drf/article/(?P<pk>\d+)/$', views.ArticleView.as_view()),
    ] # get获取列表
    # post增加数据
  • 写视图

    • 根据请求方式不同做不同的操作
    class ArticleView(APIView):
    def get(self,request,*args,**kwargs):
    pk = kwargs.get('pk')
    if not pk:
    queryset = models.Article.objects.all()
    ser = serializer.ArticleSerializer(instance=queryset,many=True)
    return Response(ser.data)
    article_object = models.Article.objects.filter(id=pk).first()
    ser = serializer.ArticleSerializer(instance=article_object, many=False)
    return Response(ser.data) def post(self,request,*args,**kwargs):
    ser = serializer.ArticleSerializer(data=request.data)
    if ser.is_valid():
    ser.save()
    return Response(ser.data)
    return Response(ser.errors) def put(self,request,*args,**kwargs):
    """全部更新"""
    pk = kwargs.get('pk')
    article_object = models.Article.objects.filter(id=pk).first()
    ser = serializer.ArticleSerializer(instance=article_object,data=request.data)
    if ser.is_valid():
    ser.save()
    return Response(ser.data)
    return Response(ser.errors) def patch(self,request,*args,**kwargs):
    """局部"""
    pk = kwargs.get('pk')
    article_object = models.Article.objects.filter(id=pk).first()
    ser = serializer.ArticleSerializer(instance=article_object, data=request.data,partial=True)
    if ser.is_valid():
    ser.save()
    return Response(ser.data)
    return Response(ser.errors) def delete(self,request,*args,**kwargs):
    """删除"""
    pk = kwargs.get('pk')
    models.Article.objects.filter(id=pk).delete()
    return Response('删除成功')
  • serializers序列化

    • serializers数据校验
    • serializers序列化
    from rest_framework import serializers
    from api import models
    class ArticleSerializer(serializers.ModelSerializer):
    category_txt = serializers.CharField(source='category.name',required=False)
    x1 = serializers.SerializerMethodField() status_txt = serializers.CharField(source='get_status_display',required=False) x2 = serializers.SerializerMethodField()
    class Meta:
    model = models.Article
    # fields = "__all__"
    fields = ['id','title','summary','content','category','category_txt','x1','status','status_txt','x2']
    # depth = 1 def get_x1(self,obj):
    return obj.category.name def get_x2(self,obj):
    return obj.get_status_display()
  • 利用postman进行前端校验

    • 模拟浏览器进行发送请求

3. DRF的应用场景

  • 前后端分离项目
  • 为app写接口
  • 写移动端接口
  • 以上用drf会比较方便

02 drf源码剖析之快速了解drf的更多相关文章

  1. drf源码剖析系列(系列目录)

    drf源码剖析系列(系列目录) 01 drf源码剖析之restful规范 02 drf源码剖析之快速了解drf 03 drf源码剖析之视图 04 drf源码剖析之版本 05 drf源码剖析之认证 06 ...

  2. 07 drf源码剖析之节流

    07 drf源码剖析之节流 目录 07 drf源码剖析之节流 1. 节流简述 2. 节流使用 3. 源码剖析 总结: 1. 节流简述 节流类似于权限,它确定是否应授权请求.节流指示临时状态,并用于控制 ...

  3. 06 drf源码剖析之权限

    06 drf源码剖析之权限 目录 06 drf源码剖析之权限 1. 权限简述 2. 权限使用 3.源码剖析 4. 总结 1. 权限简述 权限与身份验证和限制一起,决定了是否应授予请求访问权限. 权限检 ...

  4. 05 drf源码剖析之认证

    05 drf源码剖析之认证 目录 05 drf源码剖析之认证 1. 认证简述 2. 认证的使用 3. 源码剖析 4. 总结 1. 认证简述 当我们通过Web浏览器与API进行交互时,我们可以登录,然后 ...

  5. 04 drf源码剖析之版本

    04 drf源码剖析之版本 目录 04 drf源码剖析之版本 1. 版本简述 2. 版本使用 3.源码剖析 4. 总结 1. 版本简述 API版本控制使您可以更改不同客户端之间的行为.REST框架提供 ...

  6. 02 flask源码剖析之flask快速使用

    02 flask快速使用 目录 02 flask快速使用 1.flask与django的区别 2. 安装 3. 依赖wsgi Werkzeug 4. 快速使用flask 5. 用户登录&用户管 ...

  7. 01 drf源码剖析之restful规范

    01 restful规范 目录 01 restful规范 1. 什么是restful规范 2.restful规范详细 1. 什么是restful规范 restful是一套规则,是程序间进行数据传输的一 ...

  8. flask源码剖析系列(系列目录)

    flask源码剖析系列(系列目录) 01 flask源码剖析之werkzurg 了解wsgi 02 flask源码剖析之flask快速使用 03 flask源码剖析之threading.local和高 ...

  9. Python源码剖析——02虚拟机

    <Python源码剖析>笔记 第七章:编译结果 1.大概过程 运行一个Python程序会经历以下几个步骤: 由解释器对源文件(.py)进行编译,得到字节码(.pyc文件) 然后由虚拟机按照 ...

随机推荐

  1. Java学习之多线程详解

    一.多线程的实现 1.继承Thread类 ​ a.子类继承Thread类具备多线程能力 ​ b.启动线程:子类对象.start() ​ c.不建议使用:避免OOP单继承局限性 package com. ...

  2. Javascript 16进制转有符号的10进制整数

    在赶项目中开发一个单片机对应的数据接口,需要将一个两字节的十六进制转化为-256~255的10进制数.百度了好久都没有对应且简明的教程,干脆就自己写一篇.   我们都知道JavaScript整数类型有 ...

  3. TensorFlow从0到1之回归算法(11)

    回归是数学建模.分类和预测中最古老但功能非常强大的工具之一.回归在工程.物理学.生物学.金融.社会科学等各个领域都有应用,是数据科学家常用的基本工具. 回归通常是机器学习中使用的第一个算法.通过学习因 ...

  4. Tensorflow中Tensor对象的常用方法(持续更新)

    Tensor是Tensorflow中重要的对象.下面是Tensor的常用方法,后面还会写一篇随笔记录Variable的用法. 1. 生成一个(常)Tensor对象 >>>A = tf ...

  5. 【JMeter_18】JMeter逻辑控制器__吞吐量控制器<Throughput Controller>

    吞吐量控制器<Throughput Controller> 业务逻辑: 他的实际作用似乎跟吞吐量扯不上什么关系.就是单纯的控制控制器下的子节点被执行的次数或被执行比列,该控制器默认为多线程 ...

  6. JPS/JPS+ 寻路算法

    目录 概念 强迫邻居(Forced Neighbour) 跳点(Jump Point) JPS 寻路算法(Jump Point Search) 实现原理 示例过程 JPS+(Jump Point Se ...

  7. 09.DRF-ModelSerializer

    四.模型类序列化器ModelSerializer 如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serial ...

  8. Linux中bash的一些命令

    Linux——bash的简单使用 bash及其特性: 1.bash实质上是一个可执行的程序,一个用户的工作环境. 2.每一个shell下可以再打开一个shell,新打开的shell称为子shell,每 ...

  9. Office2019 相关激活秘钥

    零售版 W8W6K-3N7KK-PXB9H-8TD8W-BWTH9 批量板 N9J9Q-Q7MMP-XDDM6-63KKP-76FPM

  10. Haproxy/LVS负载均衡实现+keepalived实现高可用

    haproxy+keepalived 集群高可用集群转发 环境介绍 #内核版本 Ubuntu 18.04.4 LTS \n \l 107-Ubuntu SMP Thu Jun 4 11:27:52 U ...