zoukankan      html  css  js  c++  java
  • 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浏览页面

  • 相关阅读:
    配置linux 防火墙,只有固定IP和端口才能能访问完美解决
    转.HTML中img标签的src属性绝对路径问题解决办法,完全解决!
    weblogic 安全漏洞问题解决
    转 echarts 的使用时遇到的坑 初始化和销毁,亲测有效!
    在使用 Fortify进行源码扫描时需要做对项目需要做什么?
    eclipse 导出 jar包详细步骤
    转 Fortofy扫描漏洞解决方案2
    JSON 之 SuperObject(1)
    Delphi使用JSON解析调用淘宝IP地址库REST API 示例
    Jsoncpp的使用
  • 原文地址:https://www.cnblogs.com/xypbk/p/15213856.html
Copyright © 2011-2022 走看看