2-1 Django REST framework-DRF介绍和使用(快速入门)

目录:

  • 简介
  • 快速入门

一、简介

Django REST framework框架是一个用于构建Web API的强大而又灵活的工具. 通常简称为DRF框架 或 REST framework框架.

1、特点

  • 提供了定义序列化器serializer的方法,可以快速根据Django ORM或者其他库自动序列化/反序列化。
  • 提供了丰富的类视图、Mixin扩展类、简化视图的编写。
  • 丰富的定制层级: 函数视图、类视图、视图集合到自动生成API,满足各种需求。
  • 多中身份认证和权限认证方式的支持。
  • 内置了限流系统。
  • 直观的API web界面
  • 可扩展性, 插件丰富

2、官方文档

https://www.django-rest-framework.org/

3、源码地址

https://github.com/encode/django-rest-framework/tree/master

4、安装

#根据版本
>pip install -i https://pypi.douban.com/simple djangorestframework==3.8.2

#直接安装
>pip install -i djangorestframework

5、 settings.py配置

INSTALLED_APPS = [
		''''''
    'rest_framework'
]

二、快速入门

2.1、目录结构

-drf_test   #项目名
    -app01
        ...
        -models.py    #存放模型类
        -serializers.py  #新建,序列化我们的模型类
        -tests.py
        -views.py   #存放视图
    -drf_test
        -__init__.py
        -settings.py   # INSTALLED_APPS = [...,'rest_framework',...]
        -urls.py   #注册路由
        -wsgi.py
    -manage.py

2.2、 初始化模型类

说明:编辑Models.py

from django.db import models

class Group(models.Model):
    name = models.CharField(verbose_name='小组名字', max_length=100)
  
  def __str__(self):
    return self.name

class Student(models.Model):
    name = models.CharField(verbose_name='学生名字', max_length=100)
    age = models.IntegerField(verbose_name='学生年龄')
    group = models.ForeignKey(to=Group, on_delete=models.CASCADE)  #小组和学生之间是 一对多关系

初始化之后需要在终端初始化数据库:

>python manage.py makemigrations

>python manage.py migrate

2.3、 序列化模型类

说明:在应用下(app01)新建一个serializers.py文件,目的是序列化我们的模型类。

序列化:把模型数据转成可传输的数据,叫序列化。

反序列化:把可传输的数据转成模型数据,叫反序列化。

from .models import Student,Group
from rest_framework import serializers

class StudentSerializer(serializers.HyperlinkedModelSerializer):  #HyperlinkedModelSerializer 用的是超链接的序列化
    class Meta:
        model = Student #需要序列化类
        fields = ('id', 'name', 'age', 'group')  #需要序列化的属性,属性是在 序列化类中的,这里就是Student中的字段,group是外键,一样可以加。


class GroupSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Group
        fields = ('id', 'name')

2.4、视图展示

我们对数据的增删改查全部包含在 viewsets 里面这个类里面了。=>app01->编辑views.py

from .models import Student, Group   #导入模型
from rest_framework import viewsets
from .serializers import StudentSerializer, GroupSerializer  #导入序列化类


class StudentViewSet(viewsets.ModelViewSet):  #ModelViewSet是最终版,这边我们先认识一下
    queryset = Student.objects.all()  #告诉我们序列化哪些数据,这边就是说吧查出来的学生信息先给我序列化掉
    serializer_class = StudentSerializer  #告诉人家序列化哪个模型类


class GroupViewSet(viewsets.ModelViewSet):
    queryset = Group.objects.all()   #需要序列化的数据
    serializer_class = GroupSerializer   #要哪个序列化类

2.5、路由Url设置

通过路由器类注册视图来自动生成API的URL conf。=> 编辑 drf_test -> drf_test -> urls.py

from django.contrib import admin
from django.urls import path, include
from rest_framework import routers
from app01 import views

router = routers.DefaultRouter()
router.register(r'students', views.StudentViewSet)   #访问:http://127.0.0.1:8000/api/students/
router.register(r'groups', views.GroupViewSet)  #访问:http://127.0.0.1:8000/api/groups/

urlpatterns = [
    path('admin/', admin.site.urls),
    #path('', include(router.urls)),   # => 返回http://127.0.0.1:8000
    path('api/', include(router.urls)), #=> 返回http://127.0.0.1:8000/api
    #path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))  #认证
]

2.6、运行

说明:因为你上面是路由设置的:path('/api', include(router.urls)),所以访问的是:

http://127.0.0.1:8000/api

1、访问 http://127.0.0.1:8000/api/students/ :获取全部学生信息

2、访问 http://127.0.0.1:8000/api/students/1:根据ID 获取某个学生信息

 

这边说明一下PUT和PATCH的区别,如我要改 age 改成 22

1、PUT:需要参数全部带着

{
    "id": 1,
    "name": "帅高高",
    "age": 23, #修改为22
    "group": "http://127.0.0.1:8000/api/groups/1/"
}

2、PATCH:只需要带部分参数,我只留部分参数。

{
    "id": 1,
    "age": 22, #修改参数
    "group": "http://127.0.0.1:8000/api/groups/1/" #注:最后一个参数后面不能有逗号
}

 

posted @ 2020-04-22 14:15  帅丶高高  阅读(772)  评论(0)    收藏  举报