Ubuntu django3使用Rest_Framework

一、安装Rest_Framework环境

pip3 install djangorestframework

 

二、

1、创建应用

python manage.py startapp students

 

2、在setting.py文件将rest_framework和apps.students添加进INSTALLED_APPS。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'apps.students',
]

 

3、在setting.py文件设置REST_FRAMEWORK权限策略

# 设置权限策略:
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAdminUser',
    ],
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning', # 指定使用的版本控制类
    'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
    'VERSION_PARAM': 'version', # 版本使用的参数名称
    'DEFAULT_VERSION': 'v1', # 默认使用的版本
}

 

4、子应用的models.py文件中创建模型对象

from django.db import models

# 方式二
class Sex(models.TextChoices):
    male = 1, ''
    female = 0, ''


# Create your models here.
class Students(models.Model):
    # 表字段声明
    # 字段名 = models.数据类型(字段约束)

    # 方式一
    # male = 1
    # female = 0
    # SEX_CHOICES = {
    #     (male, '男'),
    #     (female, '女'),
    # }

    name = models.CharField(null=False, verbose_name="姓名", max_length=32)
    age = models.IntegerField(verbose_name="年龄")
    # sex = models.BooleanField(default=True, verbose_name="性别")
    sex = models.IntegerField(
        max_length=1,
        choices=Sex.choices,
        default=Sex.female,
        verbose_name="性别"
    )
    class_num = models.CharField(max_length=5, verbose_name="班级编号")
    description = models.TextField(max_length=1000, verbose_name="个性签名")

    # 表信息声明
    class Meta:
        # 设置数据库中表名
        db_table = "tb_students"
        verbose_name_plural = "学生"

    # 模型的操作方法
    def __str__(self):
        return self.name

 

5、在MySQL中创建数据库

create database students charset=utf8;

 

6、在项目同名文件夹的__init__.py设置使用pymysql作为数据库驱动

import pymysql
pymysql.version_info = (1, 4, 13, "final", 0)
pymysql.install_as_MySQLdb()

 

7、在setting.py文件配置数据库信息

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "students",
        "HOST": "127.0.0.1",
        "PORT": 3306,
        "USER": "root",
        "PASSWORD":"123456",
    },
}

 

8、执行数据迁移

python3 manage.py makemigrations
python3 manage.py migrate

执行迁移时出现报错 https://www.cnblogs.com/xypbk/p/15213459.html

 

9、创建序列化器

在students应用目录中新建serializers.py用于保存该应用的序列化器。

创建一个StudentModelSerializer用于序列化与反序列化。

from rest_framework import serializers
from .models import Students

class StudentModelSerializer(serializers.ModelSerializer):
    # 需要进行数据转换的字段

    # 当前转换的模型类相关声明
    class Meta:
        model = Students
        fields = "__all__"   # 所有字段

    # 验证数据的方法[反序列化: 接受客户端的数据]

    # 操作数据库的代码[反序列化: 保存数据的代码(添加和更新)]

    # model 指明该序列化器处理的数据字段从模型类Student参考生成
    # fields指明该序列化器包含模型类中的哪些字段,'__all__'指明包含所有字段

 

10、编写视图

在students应用的views.py中创建视图StudentViewSet,这是一个视图集合。

from rest_framework.viewsets import ModelViewSet    # drf类视图需导入
# from django.views import View    # 这是django视图类使用的

from .models import Students
from .serializers import StudentModelSerializer


# Create your views here.
# django视图有两种:FBV函数视图 和 CBV类视图
# drf中,我们经常使用的是类视图
class StudentAPIView(ModelViewSet):
    """
    这里提供了5个api接口,
    添加一条数据
    修改一条数据
    删除一条数据
    获取一条数据
    获取所有数据
    """
    queryset = Students.objects.all()     # 要操作的数据
    serializer_class = StudentModelSerializer

    # queryset指明该视图集在查询数据时使用的查询集
    # serializer_class指明该视图在进行序列化或反序列化时使用的序列化器

 

11、定义路由

在students应用的urls.py中定义路由信息

from django.urls import path
from .views import StudentAPIView

# 路由列表
urlpatterns = [

]
# 使用drf提供的路由类来自动生成路由
from rest_framework.routers import DefaultRouter
router = DefaultRouter()  # 可以处理视图的路由器
router.register('stu', StudentAPIView,basename="students")  # 向路由器中注册视图集,"stu":浏览器访问的路径,basename:路由别名
urlpatterns += router.urls  # 将路由器中的所以路由信息追到到django的路由列表中

 

12、把students子应用中的路由文件加载到总路由文件(项目目录下的urls.py)中

from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url


# 2.x之后django把url拆分成了两个路由函数
# django.urls.path 专门编写字符串路由
# django.urls.re_path 专门编写正则路由
urlpatterns = [
    path('admin/', admin.site.urls),
    path('students/', include("apps.students.urls")),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

 

13、在浏览器中输入网址127.0.0.1:8000/students,可以看到DRF提供的API Web浏览页面

 

posted @ 2021-09-01 11:31  谢牧谚  阅读(73)  评论(0编辑  收藏  举报