本帖最后由 范志远 于 2019-3-19 16:55 编辑



增加加载Djagno REST Framework模块的选项

对于settings.py文件的INSTALLED_APPS增加’rest_framework’的加载项。要利用这个框架生成REST API调用服务,需要实现以下三个模块:

Serializer:决定如何序列化(或反序列化)模型实体

ViewSet:决定要序列化哪些模型实体

URL pattern:决定如何解析URL为对应的服务

看来要实现最基本的API服务所需的代码量并不少啊,但是经过这样模块分割之后,程序的框架其实变得清晰了不少,并且有了更强大的可拓展性。

实现Serializer

新建一个文件blog/serializer.py,内容如下:

# coding: utf-8

from rest_framework import serializers

from .models import User, Entry



class UserSerializer(serializers.ModelSerializer):

    class Meta:

        model = User

        fields = ('name', 'mail')



class EntrySerializer(serializers.ModelSerializer):

    class Meta:

        model = Entry

        fields = ('title', 'body', 'created_at', 'status', 'author')



以上就是定义一个Serializer最简单的代码,model指定对应的模型实体,fields指定要序列化的数据域(可理解为数据库表的某一列)。



  

其中值得一提的是EntrySerializer中的author,它作为一个外键,其默认输出的是对应模型实体(User)的序列化结果。当然,我们可以修改其序列化实现方式。







实现ViewSet

新建一个文件blog/views.py,内容如下:



# coding: utf-8

import django_filters

from rest_framework import viewsets, filters

from .models import User, Entry

from .serializer import UserSerializer, EntrySerializer



class UserViewSet(viewsets.ModelViewSet):

    queryset = User.objects.all()

    serializer_class = UserSerializer



class EntryViewSet(viewsets.ModelViewSet):

    queryset = Entry.objects.all()

    serializer_class = EntrySerializer







实现URL pattern

修改django_rest_framework_test/urls.py,内容如下:



# coding: utf-8

from django.conf.urls import url, include

from django.contrib import admin

from blog.urls import router as blog_router



urlpatterns = [

    url(r'^admin/', admin.site.urls),

    # blog.urlsをincludeする

    url(r'^api/', include(blog_router.urls)),

]



新建一个文件blog/urls.py,内容如下:



# coding: utf-8

from rest_framework import routers

from .views import UserViewSet, EntryViewSet



router = routers.DefaultRouter()

router.register(r'users', UserViewSet)

router.register(r'entries', EntryViewSet)



这样URL pattern的定义就完成了,/api/就是我们REST API服务的入口

文章转自:https://blog.csdn.net/gg_18826075157/article/details/72869974

使用DRF来快速实现API调用服务的更多相关文章

  1. Vue.js——使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用

    概述 上一篇我们介绍了如何使用vue resource处理HTTP请求,结合服务端的REST API,就能够很容易地构建一个增删查改应用.这个应用始终遗留了一个问题,Web App在访问REST AP ...

  2. Vue.js——使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用

    转自:https://www.cnblogs.com/keepfool/p/5665953.html 概述 上一篇我们介绍了如何使用vue resource处理HTTP请求,结合服务端的REST AP ...

  3. 如何使用Postman快速简单的调用快递物流平台快递鸟API接口

    前沿 快递鸟是一家聚合类的第三方快递物流平台,目前该平台提供的产品主要以API为主.由于API不能直观的看到产品效果,需要进行API对接联调成功后才能真实的看到产品的实际效果.但是如果一上来就写代码进 ...

  4. 信鸽推送 .NET (C#) 服务端 SDK rest api 调用库(v1.2)

    信鸽推送 .NET  服务端 SDK rest api 调用库-介绍 该版本是基于信鸽推送v2版本的时候封装的,先拿出来与大家分享,封装还还凑合,不依赖其他http调用件,唯一依赖json序列化dll ...

  5. 阿里云API网关(3)快速入门(调用 API)

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  6. Yii2 的快速配置 api 服务 yii2-fast-api

    yii2-fast-api yii2-fast-api是一个Yii2框架的扩展,用于配置完善Yii2,以实现api的快速开发. 此扩展默认的场景是APP的后端接口开发,因此偏向于实用主义,并未完全采用 ...

  7. 反射实现Model修改前后的内容对比 【API调用】腾讯云短信 Windows操作系统下Redis服务安装图文详解 Redis入门学习

    反射实现Model修改前后的内容对比   在开发过程中,我们会遇到这样一个问题,编辑了一个对象之后,我们想要把这个对象修改了哪些内容保存下来,以便将来查看和追责. 首先我们要创建一个User类 1 p ...

  8. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_13-删除页面-前端-Api调用

    增加删除链接 <el-button size="small" type="text" @click="del(page.row.pageId)& ...

  9. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_21-CMS前端页面查询开发-Api调用

    在api里面定义js方法获取服务端的数据 把home模块的下的home.js文件复制到api的目录下改名叫做cms.js 复制过来 默认的代码 实际上引用的是base下的api/public.js文件 ...

随机推荐

  1. requests---requests上传图片

    我们在做接口测试的时候肯定会遇到一些上传图片,然后进行校验,今天我们一起学习通过requests上传图片,查看是否上传成功 抓取上传接口 这里我以百度为例子进行操作,为啥要用百度呢,主要上传文件比较简 ...

  2. 手机号码生成器app,手机上用的

    手机号码生成器app,在日常的工作中可能会用到,它是用来找客人用的,不是生成了拿来做手机卡使用的,可能很多人会误解他的功能. 其实他的操作并不复杂,大体分为三步. 第一步,选择省份城市比如我们选择了甘 ...

  3. SPA项目之CRUD+表单验证

    1. 表单验证 Form组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则, 并将Form-Item的prop属性设置为需校验的字段名即可 <el-dialog :titl ...

  4. WPF 委托 事件 B窗体调用A窗体方法

    原文:WPF 委托 事件 B窗体调用A窗体方法 具体实现 A窗体 中加载B窗体  B窗体触发A窗体里的方法 当点击B窗体确定Button事件   给A窗体俩个TextBox赋值 并关闭B窗体 B窗体 ...

  5. Linux中vim和vi编辑器的使用

    vim 和 vi 的关系: 可以将vim视作vi的高级版本,vim可以用颜色或下划线的方式来显示一些特殊信息.vim不止是文本处理软件,而可以说是一个程序开发工具.因为vim里面加入了很多额外功能,例 ...

  6. 惊!Python能够检测动态的物体颜色!

    本篇文章将通过图片对比的方法检查视频中的动态物体,并将其中会动的物体定位用cv2矩形框圈出来.本次项目可用于树莓派或者单片机追踪做一些思路参考.寻找动态物体也可以用来监控是否有人进入房间等等场所的监控 ...

  7. 前端笔记之Vue(五)TodoList实战&拆分store&跨域&练习代理跨域

    一.TodoList 1.1安装依赖 安装相关依赖: npm install --save-dev webpack npm install --save-dev babel-loader babel- ...

  8. python TKinter的主窗口运行程序完毕后,怎么让其自动关闭

    如题: 在pycharm 调试Tkinter程序的时候,关闭右上角的X 实际上并未退出进程,长期以往 再大的内存也会被耗尽. 一般就是下面的代码: """ from tk ...

  9. IntelliJ IDEA代码常用的快捷键(自查)

    IntelliJ IDEA代码常用的快捷键有: Alt+回车 导入包,自动修正 Ctrl+N   查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L  格式化代码 Ctrl+Alt+O ...

  10. 分词 | 双向匹配中文分词算法python实现

    本次实验内容是基于词典的双向匹配算法的中文分词算法的实现.使用正向和反向最大匹配算法对给定句子进行分词,对得到的结果进行比较,从而决定正确的分词方法. 算法描述正向最大匹配算法先设定扫描的窗口大小ma ...