ModelViewSet 视图集 实现接口
一.创建项目
1.创建 项目 :
django-admin startprojet drf
2. 创建 两个app ------ app1 ,book
python manage.py startapp app1 python manage.py startapp book
3. settings 配置 ,一定不能少了 rest_framework 这个app的注册。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'book',
'app1',
]
# 连接数据库 DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'book', # 数据库名
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'root',
'PASSWORD':'' # 这里必须为字符串
}
}
4. 主应用中 __init__.py 文件中:
import pymysql pymysql.install_as_MySQLdb()
5. bookapp 中的 model.py 中建表
from django.db import models # Create your models here. class Book(models.Model): title = models.CharField(max_length=32,verbose_name='书名') pub_date = models.DateField(verbose_name='出版日期') bread = models.IntegerField(verbose_name='阅读量') bcomment = models.IntegerField(verbose_name='评论数') class Meta: db_table ='book' def __str__(self): return self.title class Hero(models.Model): name = models.CharField(max_length=32,verbose_name='名字') age = models.IntegerField(verbose_name='年龄') class Meta: db_table='人物' def __str__(self): return self.name
6. 数据库迁移。
python manage.py makemigrations python manage.py migrate
7. 在表中录入数据。
接口实现
1.在app1 先创建serializers.py 文件
from rest_framework import serializers from book.models import Book,Hero class BookModelSerializer(serializers.ModelSerializer): class Meta:
model = Book fields='__all__' # 可以给模型序列化器里面指定的字段设置限制选项
extra_kwargs = {
'bread':{'min_value':0,'required':True}
} class HeroModelSerializer(serializers.ModelSerializer): class Meta:
model = Hero fields = '__all__'
2. app1 views.py 创建视图
from django.shortcuts import render # Create your views here.
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet
from app1.serializers import BookModelSerializer, HeroModelSerializer
from book.models import Book, Hero class BookModelViewSet(ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookModelSerializer @action(methods=['get'],detail=False)#detail=False 是否为详情页数据
def get_top_5(self,request): # 其接口 http://127.0.0.1:8000/app1/book/get_top_5/
# 获取阅读量最多的5条数据
books = Book.objects.order_by('-bread')[:5] # 取阅读量为前5的书籍 serializer = BookModelSerializer(instance=books,many=True) return Response(serializer.data) # action是drf提供的路由和视图方法绑定关系的装饰器
# from rest_framework.decorators import action
# 参数1: methods 列表,设置视图方法允许哪些http请求访问进来
# 参数2: detail 当前是否方法是否属于详情页视图,
# False,系统不会自动增加pk在生成的路由地址中
# True 则系统会自动增加pk在生成的路由地址
@action(methods=['get','post'],detail=True)
def get_one_title(self,request,pk): book = Book.objects.get(pk=pk) return Response(book.btitle) class HeroModelViewSet(ModelViewSet): queryset = Hero.objects.all() serializer_class = HeroModelSerializer
3. 配置路由
1.app1 应用下创建一个路由文件 urls.py
from rest_framework import routers from app1.views import BookModelViewSet, HeroModelViewSet urlpatterns=[] router = routers.DefaultRouter() # 开发环境用,有主界面
# router = routers.SimpleRouter() # 生产环境用
router.register('book',BookModelViewSet)
router.register('hero',HeroModelViewSet) urlpatterns += router.urls
2.主应用下 urls.py 文件中
from django.contrib import admin
from django.urls import path,include urlpatterns = [
path('admin/', admin.site.urls),
path('app1/',include('app1.urls'))
]
经过上面的创建完成了 book表和hero 表的增删改查功能的API接口的实现。
DefaultRouter()的区别 SimpleRouter()
DefaultRouter() 可以多返回一个主页面,而 simleRouter 没有以下的页面。
ModelViewSet 视图集 实现接口的更多相关文章
- DRF中的视图集的使用
1.说明:DRF框架中的视图集: 在drf开发接口中,使用GenericAPIView和视图扩展类结合起来完成接口功能是一件很常见的事情,所以,drf的作者帮我们提前把 GenericAPIView ...
- 068.Python框架Django之DRF视图集使用
一 视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ...
- Django(58)viewsets视图集详解
前言 ViewSet 只是一种基于类的视图,它不提供任何方法处理程序(如 .get()或.post()),而是提供诸如.list()和 .create() 之类的操作. ViewSet 的方法处理程序 ...
- 对drf视图集的理解
视图集ViewSet 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ...
- DRF中五大扩展类及视图集的介绍
五个扩展类 (1)ListModelMixin 列表视图扩展类,提供list(request, *args, **kwargs)方法快速实现列表视图,返回200状态码. 该Mixin的list方法会对 ...
- 使用DRF视图集时自定义action方法
在我们用DRF视图集完成了查找全部部门,创建一个新的部门,查找一个部门,修改一个部门,删除一个部门的功能后,views.py的代码是这样子的: class DepartmentViewSet(Mode ...
- 06_Tutorial 6: ViewSets & Routers 视图集与路由器
1.Tutorial 6: ViewSets & Routers 视图集与路由器 0.文档 https://q1mi.github.io/Django-REST-framework-docum ...
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(六)Picker View视图 学习笔记
想对PickerView进行操作,只能在代码中操作. 下面 ,再添加三个label组件,然后将所有组件配置到代码中(看代码),然后要实现对PickerView的操作,就要实现它的DataSource协 ...
- 多结果集IMultipleResult接口
在某些任务中,需要执行多条sql语句,这样一次会返回多个结果集,在应用程序就需要处理多个结果集,在OLEDB中支持多结果集的接口是IMultipleResult. 查询数据源是否支持多结果集 并不是所 ...
随机推荐
- cygwin下如何运行crontab定时脚本?
1. 安装cron服务(如果不能启动,使用管理员身份运行cygwin) cygrunsrv -I cron -p /usr/sbin/cron -a -D -I 是安装 cron是服务名 -p /us ...
- 【lg1799】数列
题目描述 虽然msh长大了,但她还是很喜欢找点游戏自娱自乐.有一天,她在纸上写了一串数字:1,l,2,5,4.接着她擦掉了一个l,结果发现剩下l,2,4都在自己所在的位置上,即1在第1位,2在第2位, ...
- P4492 [HAOI2018]苹果树
思路 题目要求的其实就是每种方案的权值之和(因为每种方案的概率相等) 所以自然想到要求所有的边对最终答案的贡献次数 考虑这一条边被经过了多少次,有这个子树内的点数*子树外的点数次,即\(k\times ...
- IDEA入门级使用教程----你怎么还在用eclipse?
http://blog.csdn.net/qq_31655965/article/details/52788374
- python测试
[链接]JointhePythonDeveloperscommunityonSlack! http://pythondevelopers.herokuapp.com/
- node.js模块本地代理模块(将自己本机/局域网)服务 代理到外网可以访问
npm 模块 localtunnel模块可以. lt --port 7000 其中7000是本地服务端口 会分配一个动态的url. 局域网中查看本地ip用ifconfg 或者在系统偏好设置里面查看网 ...
- 2018.3 江苏省计算机等级考试 C语言 编程题答案
题目要求:给定一个数字范围,输出满足这些条件: 1.能被3整除: 2.包含数字5, 将满足的数字放在特定的数组里输出.输出这些数里5出现的个数.数字的个数. 想起来有点伤心,本来很简单的题,考试的时候 ...
- Intellij idea 2017 图标含义
File Type Icon Recognized in ActionScript files ActionScript files Ultimate Edition Active Server Pa ...
- .NetCore Session.Redis
首先创建ASP.NET CORE Web项目,然后按如下顺序操作.1.添加nuget程序包: Microsoft.AspNetCore.Session; Microsoft.AspNetCore.Da ...
- 前端阶段_div以及css介绍
1.div div是html的一个标签,是块级元素,单独使用没有意义,必须结合css来使用,进行网页布局 2.span span是一个html标签,是一个内联元素,主要对括起来的内容进行修饰 3.&l ...