Django REST framework框架是一個用於構建Web API的強大而又靈活的工具. 通常簡稱爲DRF框架 或 REST framework框架.
特點
- 提供了定義序列化器serializer的方法,可以快速根據Django ORM或者其他庫自動序列化/反序列化;
- 提供了豐富的類視圖、Mixin擴展類、簡化視圖的編寫;
- 豐富的定製層級: 函數視圖、類視圖、視圖集合到自動生成API,滿足各種需求;
- 多中身份認證和權限認證方式的支持;
- 內置了限流系統;
- 直觀的API web界面;
- 可擴展性, 插件豐富
那什麼叫序列化和反序列化呢?
序列化 反序列化
序列化 指的是 把模型數據轉化成可傳輸的數據 (像json這種就是可傳輸的數據)
反序列化指的是 把可傳輸的數據轉化成模型類的數據
官方文檔
https://www.django-rest-framework.org/
源碼地址
https://github.com/encode/django-rest-framework/tree/master
環境安裝
pip install -i https://pypi.douban.com/simple djangorestframework==3.8.2
安裝完成之後一定要註冊
INSTALLED_APPS = [
‘’’’’’
‘rest_framework’
]
簡單的使用
模型類
創建一個學生和小組的模型類
之間的關係:一對多
from django.db import models
# Create your models here.
class Group(models.Model):
name = models.CharField(verbose_name='小組名字',max_length=10)
class Student(models.Model):
name = models.CharField(verbose_name='學生名字',max_length=10)
age = models.IntegerField(verbose_name='學生年齡')
group = models.ForeignKey(to=Group,on_delete=models.CASCADE)
寫完了之後,要注意遷移文件
遷移文件的命令
python manage.py makemigrations
python manage.py migrate
然後利用pycharm自帶的sqlite數據庫,填一些假數據
添加完假數據之後,按那個DB鍵(紅線上方)就可以
使用這個自帶的sqlite數據庫,可能要安裝一下驅動。
再添加學生的假數據
有了數據之後,就要去寫一個序列化文件
序列化
先在應用下新建一個serializers.py文件,目的是序列化我們的模型類。
結構是這樣的,每一個模型類都會對應一個序列化
在新建的這個文件中寫入下面的代碼
from rest_framework.serializers import HyperlinkedModelSerializer
from .models import Group,Student
#導入模型類
#先序列化小組類
class GroupSerializer(HyperlinkedModelSerializer):
class Meta:
#告訴它(新建的這個類),你要序列化哪個模型類以及要序列化這個類裏面的哪些字段
model = Group
fields = ('id','name')
class StudentSerializer(HyperlinkedModelSerializer):
class Meta:
model = Student
fields = ('id','name','age','group')
這個序列化就完了
下面就開始寫視圖
寫視圖
from django.shortcuts import render
from rest_framework import viewsets
from .models import *
#導入模型類
from .serializers import *
#導入序列化類
# Create your views here.
class StudentViewSet(viewsets.ModelViewSet):
queryset = Student.objects.all()
#把查出的所有學生數據都序列化
serializer_class = StudentSerializer
#告訴它改完數據之後,用了哪個序列化類
class GroupViewSet(viewsets.ModelViewSet):
queryset = Group.objects.all()
serializer_class = GroupSerializer
配置路由
根及路由下
from django.contrib import admin
from django.urls import path,include
from app01 import views
from rest_framework.routers import DefaultRouter
#使用提供的路由
route = DefaultRouter()
#把視圖生成的路由註冊到這個裏
route.register(r'students',views.StudentViewSet)
route.register(r'groups',views.GroupViewSet)
#這樣的話,他會幫我們生成對應的路由
'''
http://127.0.0.1:8000/students就會生成這樣的路由
如果是獲取當個學生的話,路由就是
http://127.0.0.1:8000/students/1/
'''
urlpatterns = [
path('admin/', admin.site.urls),
path('api/',include(route.urls)),
#這個加上api之後的路由就是http://127.0.0.1:8000/api/students
]
啓動服務器
python manage.py runserver
訪問瀏覽器http://127.0.0.1:8000/api/
會展示出這樣的數據
這些路由默認路由自動生成的,點進去之後
可以看到所有的學生,並且還可以增加學生
但是,增加學生的地方
也就是這個地方,它顯示的並不是小組的名字,那麼如何讓他顯示小組的名字呢
在模型類中,用str方法就好了
然後,再刷新頁面看
這樣就好了,並且也可以訪問當個學生