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. 利用 Powershell 编写简单的浏览器脚本

    生活中有很多事情是低效益,重复性.比如每天上某些网站,先登录再签到打卡,比如每隔一段时间清理回收站的文件等等.一个成熟的软件工程师应该想到用软件解决他. 对于这些简单的小任务,一般用脚本实现.比如Py ...

  2. <Win10开发>一些小知识。

    这篇文章分享一下UWP开发的一些零散的小知识. 1.设置应用的最小尺寸 主要用在PC上,UWA在PC可以被鼠标随意摆弄,可大可小,界面的响应式设计是一大特点.不过有些时候还是要考虑,我们的App界面元 ...

  3. Razor 视图

    Razor 视图 关于视图引擎 视图引擎简单理解就是能够支持对视图的解析,在 ASP.NET MVC 中,视图引擎的作用就是把视图处理成浏览器能够执行的 HTML 代码,不同的视图引擎,语法规则不一样 ...

  4. map处理:map(str,[1,2,3,4,5,6])

    #map(s1,s2)传入两个参数,s1是对该Iterable每个参数做处理的参数,s2是该Iterable print(list(map(str,[1,2,3,4,5,6]))) #map()传入的 ...

  5. RedHat服务器安装

    为什么选择 RedHat 市场占有率商业化比较高 厂商的支持比较丰富 新手建议ubuntu 进行上手 等熟悉了Linux环境可以选择自己喜欢的发行版 (有些Geeker就是认为Ubuntu太易于使用了 ...

  6. 4.WebPack-Loader

    一.什么是Loader WebPack默认只"认识"以*.js结尾的文件,如果想处理其他类型的文件,就必须添加Loader,有各种各样的Loader,每个Loader可处理不同类型 ...

  7. redis过期键的策略

    一.过期时间设置: 127.0.0.1:6379> expire key seconds //设置键的过期时间为多少秒 127.0.0.1:6379> setex key seconds ...

  8. Redis面试专题

    Redis面试专题 1. 什么是redis? Redis 是一个基于内存的高性能key-value数据库. (有空再补充,有理解错误或不足欢迎指正) 2. Reids的特点 Redis本质上是一个Ke ...

  9. yum 安装JDK

    系统:CentOS 7 查看当前系统是否已安装JDK yum list installed |grep java 如果没有就选择yum库中的包进行安装,查看yum库中JDK列表 yum -y list ...

  10. Git在windows使用git时出现:warning: LF will be replaced by CRLF

    $ rm -rf .git  // 删除.git $ git config --global core.autocrlf false  //禁用自动转换 $ git init $ git add