• 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首页

    • 获取列表数据

    • 获取单个数据

     

  • 相关阅读:
    Navi.Soft31.WinForm框架(含下载地址)
    Navi.Soft31.阅读导航
    工作流组件示例(全部开源)
    WinForm中播放视频示例(含源码)
    angularjs实现选项卡实例
    angularjs中使用 <input type="file">标签实现一次最多上传5张图片
    angularjs笔记《二》
    input type="number"时,maxlength不起作用怎么解决
    笔记——《正则表达式》
    如何区分slice、splice和split
  • 原文地址:https://www.cnblogs.com/angle6-liu/p/10559164.html
Copyright © 2020-2023  润新知