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/" #注:最后一个参数后面不能有逗号
}

浙公网安备 33010602011771号