一.创建项目

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 视图集 实现接口的更多相关文章

  1. DRF中的视图集的使用

    1.说明:DRF框架中的视图集: 在drf开发接口中,使用GenericAPIView和视图扩展类结合起来完成接口功能是一件很常见的事情,所以,drf的作者帮我们提前把  GenericAPIView ...

  2. 068.Python框架Django之DRF视图集使用

    一 视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ...

  3. Django(58)viewsets视图集详解

    前言 ViewSet 只是一种基于类的视图,它不提供任何方法处理程序(如 .get()或.post()),而是提供诸如.list()和 .create() 之类的操作. ViewSet 的方法处理程序 ...

  4. 对drf视图集的理解

    视图集ViewSet 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ...

  5. DRF中五大扩展类及视图集的介绍

    五个扩展类 (1)ListModelMixin 列表视图扩展类,提供list(request, *args, **kwargs)方法快速实现列表视图,返回200状态码. 该Mixin的list方法会对 ...

  6. 使用DRF视图集时自定义action方法

    在我们用DRF视图集完成了查找全部部门,创建一个新的部门,查找一个部门,修改一个部门,删除一个部门的功能后,views.py的代码是这样子的: class DepartmentViewSet(Mode ...

  7. 06_Tutorial 6: ViewSets & Routers 视图集与路由器

    1.Tutorial 6: ViewSets & Routers 视图集与路由器 0.文档 https://q1mi.github.io/Django-REST-framework-docum ...

  8. 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(六)Picker View视图 学习笔记

    想对PickerView进行操作,只能在代码中操作. 下面 ,再添加三个label组件,然后将所有组件配置到代码中(看代码),然后要实现对PickerView的操作,就要实现它的DataSource协 ...

  9. 多结果集IMultipleResult接口

    在某些任务中,需要执行多条sql语句,这样一次会返回多个结果集,在应用程序就需要处理多个结果集,在OLEDB中支持多结果集的接口是IMultipleResult. 查询数据源是否支持多结果集 并不是所 ...

随机推荐

  1. [jsp & thymeleaf] - jsp和thymeleaf的共存解析

    做项目时因为有些老jsp还需要测试用到,所以之前的thymeleaf也需要保持,配置如下: https://github.com/deadzq/jsp-thymeleaf 等空余时间在做详解吧!

  2. 【SQL】【Join基础】了解sql中的join用法,看这一篇就够了

    转自: https://www.cnblogs.com/reaptomorrow-flydream/p/8145610.html SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之 ...

  3. Git误操作 git reset强制回滚 恢复commit方法

    参考: 找回Git中丢失的Commit Git误操作 git reset强制回滚 恢复commit方法 使用Git时,常有误操作,在Commit之后又执行了git reset --hard HEAD强 ...

  4. Latex: extra alignment tab has been changed to cr

    参考: Error: extra alignment tab has been changed to \cr Latex: extra alignment tab has been changed t ...

  5. BZOJ 1070: [SCOI2007]修车(费用流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1070 题意: 思路: 神奇的构图. 因为排在后面的人需要等待前面的车修好,这里将每个技术人员拆成n个 ...

  6. dplyr-高效的数据变换与整理工具--转载

    1.背景简介 在数据分析工作中,经常需要对原始的数据集进行清洗.整理以及变换.常用的数据整理与变换工作主要包括:特定分析变量的选取.满足条件的数据记录的筛选.按某一个或几个变量排序.对原始变量进行加工 ...

  7. 【Python】【面向对象】

    """# [[面向对象]]#[访问限制]#如果要让内部属性不被外部访问,可加双下划线,编程私有变量.只有内部可以访问,外部不能访问.class Student(objec ...

  8. 【Java】【集合】

    [1. ]HashMap,LinkedHashMap,TreeMap对比 共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(valu ...

  9. 【BZOJ】3214: [Zjoi2013]丽洁体

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3214 字符串长度最大不超过$5$直接$HASH$起来 首先在$T$中考虑找到最前的一个包含 ...

  10. oracle 12c创建可插拔数据库(PDB)与用户详解

    前言 由于oracle 12c使用了CDB-PDB架构,类似于docker,在container-db内可以加载多个pluggable-db,因此安装后需要额外配置才能使用. 一.修改listener ...