10步入门Django Rest framework后端接口框架

可莉
• 阅读 466

10步入门DRF框架开发

1.安装django,版本1.11.20

安装djangorestframework, 版本3.11.0

2.注册djangorestframework到setting.py文件中的APP

10步入门Django Rest framework后端接口框架

3.创建项目

python mamage.py startproject DRF_learn

4.创建app,并注册

python manage.py startapp DRFDemo

5. 编写数据模型

E:\DRF_learn\DRFDemo\models.py

from django.db import models


# Create your models here.


class Author(models.Model):
    """
    图书作者表
    """
    name = models.CharField('作者姓名', max_length=20)
    age = models.SmallIntegerField('年龄')

    def __str__(self):
        return self.name


class Book(models.Model):
    """
    图书表
    """
    book_name = models.CharField('图书名称', max_length=100)
    author = models.ForeignKey(Author, related_name='author_book')
    publish_time = models.DateTimeField('出版时间', auto_now_add=True)

    def __str__(self):
        return self.book_name

6.数据迁移

python manage.py makemigrations

python manage.py migrate

7.编写api接口

  在DRFDemo目录下新建api包,并创建author和book模块

  10步入门Django Rest framework后端接口框架

 author.py内容:

from rest_framework import generics, serializers
from ..models import Author


class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Author
        fields = '__all__'


class CreateAuthor(generics.CreateAPIView):
    """
    新增作者
    """
    queryset = Author.objects.all()
    serializer_class = AuthorSerializer

book.py内容:

from rest_framework import generics
from rest_framework import serializers
from ..models import Book


class BookSerializer(serializers.ModelSerializer):
    """
    Book模型的序列化器
    """
    # ReadOnly增加序列化时额外的字段信息(友好显示图书作者名称)
    author_name = serializers.ReadOnlyField(source='author.name')

    class Meta:
        model = Book
        fields = '__all__'


class CreateBook(generics.CreateAPIView):
    """
    新增图书
    """
    # queryset = Book.objects.all()
    serializer_class = BookSerializer


class DeleteBook(generics.DestroyAPIView):
    """
    删除图书
    """
    queryset = Book.objects.all()
    serializer_class = BookSerializer


class UpdateBook(generics.UpdateAPIView):
    """
    修改图书信息
    """
    queryset = Book.objects.all()
    serializer_class = BookSerializer


class BookList(generics.ListAPIView):
    """
    获取所有的图书列表
    """
    queryset = Book.objects.all()
    serializer_class = BookSerializer


class BookDetail(generics.RetrieveAPIView):
    """
    获取单个图书信息
    """
    # 前端接口请求时只能在该queryset中查找结果,如果请求的资源不在该查询结果集中则不会返回具体的图书信息
    queryset = Book.objects.filter(author_id=3)
    serializer_class = BookSerializer

    # 重写该方法,获得具体的一个对象
    # def get_object(self):
    #     obj = Book.objects.get(id=1)
    #     return obj

总结:

以下常用的5种子类(CreateAPIView/DestroyAPIView/UpdateAPIView/ListAPIView/RetrieveAPIView)

中只有继承CreateAPIView的视图类不需要queryset属性,继承其它子类的视图类必须要有该属性,所有的视图都必须有serializer_class属性。

8. 编写路由

  8.1 在DRFDemo下新增urls.py文件,里面写:

E:\DRF_learn\DRFDemo\urls.py

from django.conf.urls import url
from .api import book, author

urlpatterns = [
    url(r'^create_book$', book.CreateBook.as_view()),
    url(r'^delete_book/(?P<pk>\d+)$', book.DeleteBook.as_view()),
    url(r'^update_book/(?P<pk>\d+)$', book.UpdateBook.as_view()),
    url(r'^booklist$', book.BookList.as_view()),
    url(r'^book/(?P<pk>\d+)$', book.BookDetail.as_view()),
    url(r'^create_author$', author.CreateAuthor.as_view()),
]

注意:这里的接口命名不符合Restful规范,只是为了便于区分识别

8.2 将子路由包含进项目主路由中:

E:\DRF_learn\DRF_learn\urls.py

from django.contrib import admin
from django.conf.urls import url, include

urlpatterns = [
    url('admin/', admin.site.urls),
    url(r'^drf_demo/', include('DRFDemo.urls'))
]

9. 配置启动

pycharm中配置好host

10步入门Django Rest framework后端接口框架

修改settings.py中的ALLOWED_HOSTS参数

10步入门Django Rest framework后端接口框架

单击启动按钮

10步入门Django Rest framework后端接口框架

 pycharm下方出现如下就说明启动好了

10步入门Django Rest framework后端接口框架

10. 访问测试

10.1 新增作者接口

地址:http://127.0.0.1:8000/drf\_demo/create\_author

填写name和age,单击POST

10步入门Django Rest framework后端接口框架

查看数据库中,已新增

10步入门Django Rest framework后端接口框架

10.2 新增图书接口:

http://127.0.0.1:8000/drf_demo/create_book

10步入门Django Rest framework后端接口框架

数据库查看:

10步入门Django Rest framework后端接口框架

10.3 删除图书接口:

http://127.0.0.1:8000/drf_demo/delete_book/4

10步入门Django Rest framework后端接口框架

10.4 修改图书接口:

http://127.0.0.1:8000/drf_demo/update_book/3

10步入门Django Rest framework后端接口框架

10.5 查询单个图书接口:

http://127.0.0.1:8000/drf_demo/book/2

10步入门Django Rest framework后端接口框架

10.6 查询所有图书接口:

http://127.0.0.1:8000/drf_demo/booklist

10步入门Django Rest framework后端接口框架

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这