官方文档
https://www.django-rest-framework.org/
安装
pip install django==3.2.12 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install djangorestframework==3.13.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pymysql==1.0.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
创建项目
# 创建项目
django-admin startproject my_drf
# 创建应用
django-admin startapp app01
把应用放到apps文件夹
- 新建个apps文件 并创建个__init__.py 文件
- 然后把创建的app 放到apps 里
配置 settings.py INSTALLED_APPS
from pathlib import Path
import os,sys # 新加的代码
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
sys.path.append(os.path.join(BASE_DIR,'apps')) # 新加的代码
···········
INSTALLED_APPS = [
····
'rest_framework', #注册 drf
'app01', # 新加的代码
]
配置 Mysql数据库
- 确保已经创建了 my_drf 数据库
create database my_drf charset=utf8mb4;
- 在settings.py文件下 配置 Mysql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'my_drf', #库名
'USER': 'root', #用户
'PASSWORD': 'root', #密码
'HOST': '127.0.0.1', #ip
'PORT': '3306', #端口
'OPTIONS': {'charset': 'utf8mb4'}, ###支持emoji表情
}
}
应用下的_init_.py 设置默认加载 pymysql
import pymysql
pymysql.install_as_MySQLdb()
models模型
from django.db import models
# Create your models here.
class Group(models.Model):
name = models.CharField(verbose_name='小组名字',max_length=5)
def __str__(self):
return self.name
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
序列化器
- 在应用下新建一个serializers.py文件,目的是序列化我们的模型类
# ==================导入模块===============
from dataclasses import fields
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')
视图
- 我们对数据的增删改查全包含在viewsets里面这个类里面了
from django.shortcuts import render
# Create your views here.
from rest_framework import viewsets
from .models import Student,Group #导入模型类
from .serializers import * #导入序列化器
class StudentViewSet(viewsets.ModelViewSet):
queryset = Student.objects.all()
serializer_class = StudentSerializer
class GroupViewSet(viewsets.ModelViewSet):
queryset = Group.objects.all()
serializer_class = GroupSerializer
路由
#================= 导入模块 =================
from django.urls import path
from rest_framework.routers import DefaultRouter
from app01.views import StudentViewSet,GroupViewSet
# ---- 1. 实例化一个 DefaultRouter ----
router = DefaultRouter()
# ---- 2. 注册相应的URL ----
#注册对象
router.register('students',StudentViewSet) # http://127.0.0.1:8000/api/v1/facultys
router.register('groups',GroupViewSet) # http://127.0.0.1:8000/api/v1/major
urlpatterns = [
]
# ---- 3. 附加到 urlpatterns 集合中 ----
urlpatterns += router.urls
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/v1/', include('app01.urls')),
]
启动测试
python manage.py runserver