案例:

实现过程:

  1. 创建一个项目:  

django-adim  startproject dfr3

  2.  创建 一个app    homwork

python manage.py startapp homework

  3. settings.py

必须注册 rest_framework 

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'homework',
]

连接数据库:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'book',
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'root',
'PASSWORD':''
}
}

主应用  _init_.py 文件下:

import pymysql

pymysql.install_as_MySQLdb()

serilazers.py 文件中

from rest_framework import serializers

from homework.models import Province

class ProvinceModelSerilazers(serializers.ModelSerializer):

    class Meta:
model = Province
fields ='__all__' # 序列化器 2 只显示 id 和name 字段
class Province2ModelSerilazers(serializers.ModelSerializer): class Meta:
model = Province
fields =['id','name']

views.py

from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet,ReadOnlyModelViewSet from .serilazers import ProvinceModelSerilazers,Province2ModelSerilazers
from .models import Province class ProvinceModelViewSet(ModelViewSet): queryset = Province.objects.all()
serializer_class = ProvinceModelSerilazers @action(methods=['get',],detail=False)
def get_gdp_top3(self,request):
'''查gdp前3的省份'''
# datas= Province.objects.all().order_by('-gdp')[:3]
# serializer = ProvinceModelSerilazers(instance=datas,many=True)
datas =self.get_queryset().order_by('-gdp')[:3]
serializer = self.get_serializer(instance=datas,many=True)
return Response(serializer.data) class ProvinceReadOnlyModelViewSet(ReadOnlyModelViewSet): queryset = Province.objects.all()
# serializer_class = ProvinceModelSerilazers def get_serializer_class(self): if self.action=='list': return Province2ModelSerilazers # 当获取所有页只返回两个字段
else:
return ProvinceModelSerilazers # 当获取详情页是返回所有字段

路由

1. homework 视图中 urls.py 路由

from django.urls import path,re_path

from rest_framework.routers import DefaultRouter
from homework import views
urlpatterns=[] router = DefaultRouter()
router.register('province',views.ProvinceModelViewSet)
router.register('prov',views.ProvinceReadOnlyModelViewSet) urlpatterns += router.urls

2、总路由

from django.contrib import admin
from django.urls import path,include urlpatterns = [
path('admin/', admin.site.urls),
path('hw/', include('homework.urls')),
]

drf 需求案例1的更多相关文章

  1. 三 drf 认证,权限,限流,过滤,排序,分页,异常处理,接口文档,集xadmin的使用

    因为接下来的功能中需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py createsuperuser 创建管理员以后,访问admin站点 ...

  2. Samba共享目录的多用户权限设置案例

    下面根据实际工作中遇到的一个共享目录的多用户权限需求案例来说明下Samba用户权限的设置. 一.需求场景领导:李一(liyi)正式员工(zhengshiyuangong):刘二二(liuerer).于 ...

  3. Flume案例Ganglia监控

    Flume案例和Flume监控系统的使用: 安装 将apache-flume-1.7.0-bin.tar.gz上传到linux的/opt/software目录下 解压apache-flume-1.7. ...

  4. jmeter压测学习1-window环境准备与案例

    前言 最近用jmeter做一些接口的压力测试,记录下使用过程中遇到的一些问题. 在使用window机器做并发压测的时候,发现并发数设置100的时候,会出现报错:java.net.SocketExcep ...

  5. 30个关于Shell脚本的经典案例(上)

    对于初学者而言,因为没有实战经验,写不出来Shell脚本很正常,如果工作了几年的运维老年还是写不出来,那就是没主动找需求,缺乏练习,缺乏经验.针对以上问题,总结了30个生产环境中经典的Shell脚本, ...

  6. 巧用freemarker

    使用Freemarker宏进行可扩展式模块化编程 该文是转载而来,并非我本人所写,但是觉得真心不错,所以收藏一下 一.前言 今天的文章聊一下freemarker的一些特性:宏,我们将使用它写出一些模块 ...

  7. JavaIO之File类

    Java-IO之File类 Java-IO之File类 1. File类 1.1. File类说明 1.2. 体验 File 类 1.3. 构造一个 File 类实例: 1.4. 路径: 1.4.1. ...

  8. 如何在Vue2中实现组件props双向绑定

    Vue学习笔记-3 前言 Vue 2.x相比较Vue 1.x而言,升级变化除了实现了Virtual-Dom以外,给使用者最大不适就是移除的组件的props的双向绑定功能. 以往在Vue1.x中利用pr ...

  9. 使用Freemarker宏进行可扩展式模块化编程

    作者:Chu Lung 原文链接:http://blog.chulung.com/article/13 本文由MetaCLBlog于2016-07-08 14:42:10自动同步至cnblogs 一. ...

随机推荐

  1. selinux权限问题【转】

    本文转载自:https://blog.csdn.net/u011386173/article/details/83339770 版权声明:本文为博主原创文章,未经博主允许不得转载. https://b ...

  2. 再谈 linux 的sed用法

    很多东西, 如果太复杂, 太庞杂, 一开始, 可以只掌握最简单的. 如果连最简单的都不能掌握, 那看那么多有什么用? 关于cut, sed的 处理过程和思想? vm: virtual machine, ...

  3. 【系列教程1】Gradle入门系列二:第一个Java项目

    这篇教程的主要内容是讲解如何用Gradle编译和打包一个简单的Java项目. 该Java项目只有一个需求:我们的构建脚本必须创建一个可执行的Jar文件,换句话说,我们必须能够使用命令java -jar ...

  4. BZOJ 3622 已经没有什么好怕的了

    扯淡 看到题目想到二项式反演 然后忘了给求阶乘的时候取模,调了一晚上 真令人窒息 思路 二项式反演 首先二项式反演还有另一种形式(不会证) 设\(G_i\)为有至少i个的方案数量,\(F_i\)为恰好 ...

  5. C++笔记(2018/2/7)

    类class 类的名字就是用户自定义的类型的名字.可以像使用基本类型那样来使用它. 一个类所占用的内存空间的大小,等于所有成员变量的大小之和. 类之间可以用 "="进行赋值,但是不 ...

  6. Images之multi-stage builds

    原文链接 Use multi-stage builds Multi-stage builds are a new feature requiring Docker 17.05 or higher on ...

  7. Bash 和 Zsh 开启 vi-mode

    Bash 和 Zsh 开启 vi-mode bash 有两种操作模式,分别是 emacs 和 vi . 在 bash 中 set -o vi # 临时开启 vi 模式 vi ~/.bashrc # 在 ...

  8. [0406]学习一个——Unit 1 Html、CSS与版本控制

    前言 最近发现了Github的Student认证,本来想用来注册Digital Ocean搭个梯子,结果注册验证不能用VISA借记卡=~=. 那么在这漫长的清明节假期里,只有学习能满足空虚的内心(划掉 ...

  9. hdu 6170 Two strings dp

    Two strings Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Prob ...

  10. Git 中 pull 和 clone 的区别

    git pull git clone clone 是本地没有 repository 时,将远程 repository 整个下载过来. pull 是本地有 repository 时,将远程 reposi ...