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. @codeforces - 594E@ Cutting the Line

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个字符串 s 与正整数 k.现在你需要进行恰好一次操作: ...

  2. matlab-整数规划(非线性规划之蒙特卡洛法(随机取样法))

    首先编写M 文件mengte.m 定义目标函数f 和约束向量函数g,程序如下:function [f,g]=mengte(x);%定义目标函数f和约束向量函数g f=x()^+x()^+*x()^+* ...

  3. mysql关于group by的用法

    原文:https://blog.csdn.net/u014717572/article/details/80687042 先来看下表1,表名为test: 表1 执行如下SQL语句: SELECT na ...

  4. Ios App破解之路二 JJ斗地主

    前提条件: 越狱手机里, 安装了 <JJ斗地主> 使用砸壳工具clutch 下载地址: https://github.com/KJCracks/Clutch/releases dzq:~/ ...

  5. ida 动态调试apk

    1,启动 android_x86_server 2 adb forward tcp:23946 tcp:23946 调试应用命令:adb shell am start -D -n com.droidh ...

  6. MySQL的使用方法和视图、索引、以及存储过程的一些简单方法

    一,基本概念 1, 常用的两种引擎:         (1) InnoDB        a,支持ACID,简单地说就是支持事务完整性.一致性:         b,支持行锁,以及类似ORACLE的一 ...

  7. Appium 概括与环境安装

    Appium 是什么, 有什么用 Appium 用途和特点 appium 是一个移动 app 自动化工具 手机APP自动化有什么用? 自动化完成一些重要性的任务 比如微信客服机器人 爬虫 就是通过自动 ...

  8. react 使用的方法:

    react  使用方法: 第一步: 初始化react 项目 (1)安装node npm (2)npm install --global create-react-app (3)create-react ...

  9. Java 14带来了许多新功能

    本文是作者翻译自java magazine的文章,我也将回持续的关注java的最新消息,即时和大家分享.如有翻译不准确的地方,欢迎大家留言,我将第一时间修改.   Java 14包含比前两个发行版更多 ...

  10. 一对多分页的SQL到底应该怎么写?

    1. 前言 MySQL一对多的数据分页是非常常见的需求,比如我们要查询商品和商品的图片信息.但是很多人会在这里遇到分页的误区,得到不正确的结果.今天就来分析并解决这个问题. 2. 问题分析 我们先创建 ...