DRF项目创建流程(1)

一 web应用模式

  • 前后端不分离

  • 前后端分离

二 RESTFUL API规范

  REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中。

  RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中。

  这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源。

而对于数据资源分别使用POST、DELETE、GET、UPDATE等请求动作来表达对数据的增删查改。

请求方法请求地址后端操作
GET /students 获取所有学生
POST /students 增加学生
GET /students/1 获取编号为1的学生
PUT /students/1 修改编号为1的学生
DELETE /students/1 删除编号为1的学生

 

三 启动django项目

django-admin startproject drf #创建项目drf
python manage.py startapp booktest #创建booktestapp

 

四 配置mysql数据库

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

 

五 模型类和数据添加

booktest/models.py

from django.db import models

#定义图书模型类BookInfo
class BookInfo(models.Model):
    btitle = models.CharField(max_length=20, verbose_name='图书标题')
    bpub_date = models.DateField(verbose_name='出版时间')
    bread = models.IntegerField(default=0, verbose_name='阅读量')
    bcomment = models.IntegerField(default=0, verbose_name='评论量')
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')

    class Meta:
        db_table = 'tb_books'  # 指明数据库表名
        verbose_name = '图书'  # 在admin站点中显示的名称
        verbose_name_plural = verbose_name  # 显示的复数名称

    def __str__(self):
        """定义每个数据对象的显示信息"""
        return "图书:《"+self.btitle+""

#定义英雄模型类HeroInfo
class HeroInfo(models.Model):
    GENDER_CHOICES = (
        (0, 'female'),
        (1, 'male')
    )
    hname = models.CharField(max_length=20, verbose_name='名称')
    hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
    hcomment = models.CharField(max_length=200, null=True, verbose_name='描述信息')
    hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书')  # 外键
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')

    class Meta:
        db_table = 'tb_heros'
        verbose_name = '英雄'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.hname
模型类

 

数据迁移

python manage.py makemigrations

python manage.py migrate

 

插入数据mysql语句

insert into tb_books(btitle,bpub_date,bread,bcomment,is_delete) values
('射雕英雄传','1980-5-1',12,34,0),
('天龙八部','1986-7-24',36,40,0),
('笑傲江湖','1995-12-24',20,80,0),
('雪山飞狐','1987-11-11',58,24,0);


insert into tb_heros(hname,hgender,hbook_id,hcomment,is_delete) values
('郭靖',1,1,'降龙十八掌',0),
('黄蓉',0,1,'打狗棍法',0),
('黄药师',1,1,'弹指神通',0),
('欧阳锋',1,1,'蛤蟆功',0),
('梅超风',0,1,'九阴白骨爪',0),
('乔峰',1,2,'降龙十八掌',0),
('段誉',1,2,'六脉神剑',0),
('虚竹',1,2,'天山六阳掌',0),
('王语嫣',0,2,'神仙姐姐',0),
('令狐冲',1,3,'独孤九剑',0),
('任盈盈',0,3,'弹琴',0),
('岳不群',1,3,'华山剑法',0),
('东方不败',0,3,'葵花宝典',0),
('胡斐',1,4,'胡家刀法',0),
('苗若兰',0,4,'黄衣',0),
('程灵素',0,4,'医术',0),
('袁紫衣',0,4,'六合拳',0);
插入数据代码

 

六 引入Django Rest_Framework

6.1 DRF简介

核心思想: 缩减编写api接口的代码

  Django REST framework是一个建立在Django基础之上的Web 应用开发框架,可以快速的开发REST API接口应用。在REST framework中,提供了序列化器Serialzier的定义,可以帮助我们简化序列化与反序列化的过程,不仅如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工作。REST framework还提供了认证、权限、限流、过滤、分页、接口文档等功能支持。REST framework提供了一个API 的Web可视化界面来方便查看测试接口。

 

官方文档:https://www.django-rest-framework.org/

特点:

  • 提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;

  • 提供了丰富的类视图、Mixin扩展类,简化视图的编写;

  • 丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要;

  • 多种身份认证和权限认证方式的支持;[jwt]

  • 内置了限流系统;

  • 直观的 API web 界面;

  • 可扩展性,插件丰富

 

6.2 环境安装与配置

pip install djangorestframework #安装drf

在shettings.py中配置添加'rest_framework'。

INSTALLED_APPS = [
    ...
    'rest_framework',
]

 

七 创建序列化器

booktext/serializers.py

from rest_framework import serializers
from booktest.models import BookInfo
class BookInfoSerializer(serializers.ModelSerializer):
    """专门用于对图书进行进行序列化和反序列化的类: 序列化器类"""
    class Meta:
        # 当前序列化器在序列化数据的时候,使用哪个模型
        model = BookInfo
        # fields = ["id","btitle"] # 多个字段可以使用列表声明,如果是所有字段都要转换,则使用 '__all__'
        fields = '__all__' # 多个字段可以使用列表声明,如果是所有字段都要转换,则使用 '__all__'

 

八 视图使用序列化器

 books/views.py

from rest_framework.viewsets import ModelViewSet
from booktest.models import BookInfo
from .serializers import BookInfoSerializer
# Create your views here.
class BookInfoAPIView(ModelViewSet):
    # 当前视图类所有方法使用得数据结果集是谁?
    queryset = BookInfo.objects.all()
    # 当前视图类使用序列化器类是谁
    serializer_class = BookInfoSerializer

 

九 配置booktest路由

 booktest/urls

from rest_framework.routers import DefaultRouter
from .views import BookInfoAPIView
urlpatterns = []

# 创建路由对象
routers = DefaultRouter()
# 通过路由对象对视图类进行路由生成
routers.register("books",BookInfoAPIView)

urlpatterns+=routers.urls

 

十 全局urls.py的分配

from django.contrib import admin
from django.urls import path, include


urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include("booktest.urls")),#给app分配路由
]

 

十一 效果展示

  • api首页

 

  • 获取列表数据

 

  • 获取单个数据

 

 

posted @ 2019-03-19 19:16  柳帅  阅读(945)  评论(0编辑  收藏  举报
//替换成自己路径的js文件