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

1. 什么是drf

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

2. 安装

  1. pip3 install djangorestframework

3. 使用

  • 注册app

    1. INSTALLED_APPS = [
    2. 'django.contrib.admin',
    3. 'django.contrib.auth',
    4. 'django.contrib.contenttypes',
    5. 'django.contrib.sessions',
    6. 'django.contrib.messages',
    7. 'django.contrib.staticfiles',
    8. 'rest_framework'
    9. ]
  • 写路由

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

    • 根据请求方式不同做不同的操作
    1. class ArticleView(APIView):
    2. def get(self,request,*args,**kwargs):
    3. pk = kwargs.get('pk')
    4. if not pk:
    5. queryset = models.Article.objects.all()
    6. ser = serializer.ArticleSerializer(instance=queryset,many=True)
    7. return Response(ser.data)
    8. article_object = models.Article.objects.filter(id=pk).first()
    9. ser = serializer.ArticleSerializer(instance=article_object, many=False)
    10. return Response(ser.data)
    11. def post(self,request,*args,**kwargs):
    12. ser = serializer.ArticleSerializer(data=request.data)
    13. if ser.is_valid():
    14. ser.save()
    15. return Response(ser.data)
    16. return Response(ser.errors)
    17. def put(self,request,*args,**kwargs):
    18. """全部更新"""
    19. pk = kwargs.get('pk')
    20. article_object = models.Article.objects.filter(id=pk).first()
    21. ser = serializer.ArticleSerializer(instance=article_object,data=request.data)
    22. if ser.is_valid():
    23. ser.save()
    24. return Response(ser.data)
    25. return Response(ser.errors)
    26. def patch(self,request,*args,**kwargs):
    27. """局部"""
    28. pk = kwargs.get('pk')
    29. article_object = models.Article.objects.filter(id=pk).first()
    30. ser = serializer.ArticleSerializer(instance=article_object, data=request.data,partial=True)
    31. if ser.is_valid():
    32. ser.save()
    33. return Response(ser.data)
    34. return Response(ser.errors)
    35. def delete(self,request,*args,**kwargs):
    36. """删除"""
    37. pk = kwargs.get('pk')
    38. models.Article.objects.filter(id=pk).delete()
    39. return Response('删除成功')
  • serializers序列化

    • serializers数据校验
    • serializers序列化
    1. from rest_framework import serializers
    2. from api import models
    3. class ArticleSerializer(serializers.ModelSerializer):
    4. category_txt = serializers.CharField(source='category.name',required=False)
    5. x1 = serializers.SerializerMethodField()
    6. status_txt = serializers.CharField(source='get_status_display',required=False)
    7. x2 = serializers.SerializerMethodField()
    8. class Meta:
    9. model = models.Article
    10. # fields = "__all__"
    11. fields = ['id','title','summary','content','category','category_txt','x1','status','status_txt','x2']
    12. # depth = 1
    13. def get_x1(self,obj):
    14. return obj.category.name
    15. def get_x2(self,obj):
    16. 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. ucore系统 eclipse-cdt实验环境准备

    官网下载eclipse eclipse-cpp-luna-SR2-linux-gtk-x86_64.tar.gz省略安装jdk 等配置解压安装即可导入实验的项目 点击完成即可完成导入 开始配置qemu ...

  2. python+selenium识别图片验证码

    import timeimport pytesseractfrom PIL import Image, ImageEnhancefrom selenium import webdriver url = ...

  3. Happens-Before原则

    Java内存模型是通过各种操作来定义的,包括对变量的读/写操作,监视器的加锁和释放操作,以及线程的启动和合并操作.JMM为程序中所有的操作定义了一个偏序关系,称之为Happens-Before.要想保 ...

  4. c++的两个冒号::四个点是什么意思,什么作用呢?

    c++的两个冒号::四个点是什么意思,什么作用呢? 双冒号(::)用法 (1)表示“域操作符”例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定 ...

  5. 7、struct2的命名空间

    采用命名空间可以区分不同action下面相同的函数名称 我们来看下面的一个程序的代码 我们来看下面的代码: 添加物料的action处理类: package com.weiyuan.test; publ ...

  6. 【String注解驱动开发】你了解@PostConstruct注解和@PreDestroy注解吗?

    写在前面 在之前的文章中,我们介绍了如何使用@Bean注解指定初始化和销毁的方法,小伙伴们可以参见<[Spring注解驱动开发]如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!& ...

  7. springboot_自动配置原理

    目录 1.1 @SpringBootApplication 2.1 @EnableAutoConfiguration 2.1.1 @AutoConfigurationPackage 2.1.2 @Im ...

  8. SQL注入之报错注入常见函数

  9. 线性dp 打鼹鼠

    鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个n*n 的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气.你可以控 ...

  10. 语言模型 N-gram 与其平滑方法推导

    N-gram N-gram 作为一个名词表示的是一个给定文本/音频样本中有n项(音素,音节,字母,单词)的一个连续序列. 数学表达 N-gram 模型表示的是当前这个 word \(w_i\) 依赖于 ...