2. 快速入门


官方文档

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

路由

  • 应用新建urls.py
#================= 导入模块  =================
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