zoukankan      html  css  js  c++  java
  • djangorestframework简单使用

    djangorestframework

       该模块是Django在对FrameWork规范的一种支持,可以让我们快速的编写出符合FrameWork规范的接口。

       使用pip命令进行安装,如提示安装失败可查询djangorestframeworkDjango版本的对应关系,如果你使用旧版Django,可尝试降低djangorestframework的版本号。

    pip install djangorestframework
    

    基本使用

    注册drf

       当下载完成后,需要在settings.py中注册drf

    INSTALLED_APPS = [
        'app01.apps.App01Config', # 注册app
        'rest_framework', # 注册drf
    ]
    
    

    创建模型表

       下一步是创建模型表,记得最后要执行的两条命令。

    from django.db import models
    
    class User(models.Model):
        user_id = models.AutoField(primary_key=True, verbose_name="用户编号")
        user_name = models.CharField(max_length=32, verbose_name="用户名")
        user_gender = models.BooleanField(
            choices=([0, "male"], [1, "female"]), verbose_name="用户性别")
        user_introduction = models.TextField(
            max_length=1024, null=True, blank=True, verbose_name="用户简介")
    
        def __str__(self):
            return self.user_name
    
    # python manage.py makemigrations
    # python manage.py migrate
    

    序列化类

       由于我们的API需要将该表中的数据进行返回,返回那些结果就需要用到序列化类。

       在app01下新建一个任意的py文件,开始编辑序列化的规则

    from .models import User  # 导入模型表
    from rest_framework.serializers import ModelSerializer  # 导入模型序列化
    
    
    class UserModelSerializer(ModelSerializer):
        class Meta:
            model = User  # 指定序列的模型表
            fields = "__all__"  # 序列化该表中所有字段
    

    书写API

       下面就开始书写API了,API统一采用CBV的形式进行书写。

    from django.shortcuts import render
    from .models import User
    from .drf_ser import UserModelSerializer  # 引入序列化的类
    from rest_framework.viewsets import ModelViewSet  # ModelViewSet是drf中对View的一层封装,它会自动识别不同的请求方式,如GET、POST等
    
    class Users(ModelViewSet):
        queryset = User.objects.all()  # 模型表需要拿出所有数据,内部会自动进行增删改查
        serializer_class = UserModelSerializer  # 序列化后会自动进行返回数据
    

    书写路由

       下面就是路由的书写,路由的书写有些不一样的地方,它需要将你的API接口单独书写后进行合并。

    from django.conf.urls import url
    from django.contrib import admin
    from rest_framework.routers import DefaultRouter  # 导入drf的默认路由
    from app01 import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
    ]
    
    router = DefaultRouter()  # 处理视图的路由器
    router.register("user",views.Users)  # 注册视图集
    
    urlpatterns.extend(router.urls)  # 路由合并
    

    可能的问题

       如果你链接的是mysql数据库,可能会提示你的pymysql版本问题。

       此时只需要在项目全局文件夹下的__init__.py文件中,添加下面三句代码:

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

    接口测试

    获取所有

       使用GET请求来获取到所有的数据。

    http://127.0.0.1:8000/user/
    

       可以发现,它遵循了framework设计规范,返回的是一个Array嵌套object

    [
        {
            "user_id": 1,
            "user_name": "用户1",
            "user_gender": false,
            "user_introduction": ""
        },
        {
            "user_id": 2,
            "user_name": "用户2",
            "user_gender": false,
            "user_introduction": ""
        },
        {
            "user_id": 3,
            "user_name": "用户3",
            "user_gender": true,
            "user_introduction": ""
        }
    ]
    

    获取单个

       使用GET请求指定获取某一条数据。它会自动查找pk为2的记录。

    http://127.0.0.1:8000/user/2/
    

       返回结果是一个单纯的object

    {
        "user_id": 1,
        "user_name": "用户1",
        "user_gender": false,
        "user_introduction": ""
    }
    

    新建用户

       使用POST请求来新建一个用户。需要修改发送请求的方式为POST,并且还需要在Body体中添加JSON格式的数据。

    {
        "user_id": 4,
        "user_name": "用户4",
        "user_gender": 1,
        "user_introduction": "我很难过"
    }
    

       由于遵循framework设计规范,它会将新增的这一条记录给你返回回来。

    {
        "user_id": 4,
        "user_name": "用户4",
        "user_gender": 1,
        "user_introduction": "我很难过"
    }
    

    修改用户

       修改时可以使用PUT,也可以使用PATCH

       更推荐使用PATCH,因为使用PUT你必须将完整的信息传入。

       以下示例是使用PUT

    http://127.0.0.1:8000/user/1/
    

       这是请求体中的信息,注意现在并没有将完整的资源传过去:

    {
        "user_name": "尝试修改用户1"
    }
    
    # 完整的应该是这样的
    # {
    #     "user_id": 1,
    #     "user_name": "尝试修改用户1",  # 即使我只修改name,也必须传入完整的
    #     "user_gender": false,
    #     "user_introduction": ""
    # }
    

       当尝试修改,会返回该信息

    {
        "user_gender": [
            "该字段是必填项。"
        ]
    }
    

       如果是使用PATCH,则返回信息是这样的,不用传入完整的资源:

    {
        "user_id": 1,
        "user_name": "尝试修改用户1",
        "user_gender": false,
        "user_introduction": ""
    }
    

    删除用户

       尝试修改用户1,使用delete请求方式,它没有任何返回值。

    http://127.0.0.1:8000/user/1/
    

    使用小结

       可以看见,使用djangorestframework后,一个接口,三行代码就可以完整增删改查等操作。

       十分的方便。

  • 相关阅读:
    JavaSE_11_File类、递归
    JavaSE_10_IO流
    leyou_07_对数据的操作
    JavaSE_09_Map
    JavaSE_08_Collections常用功能
    java 22
    java 22
    java 22
    java 22
    java 22
  • 原文地址:https://www.cnblogs.com/Yunya-Cnblogs/p/13865560.html
Copyright © 2011-2022 走看看