加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

djangorestframework简单使用

发布时间:2020-12-15 17:11:19 所属栏目:大数据 来源:网络整理
导读:djangorestframework 该模块是 Django 在对 FrameWork 规范的一种支持,可以让我们快速的编写出符合 FrameWork 规范的接口。 使用 pip 命令进行安装,如提示安装失败可查询 djangorestframework 与 Django 版本的对应关系,如果你使用旧版 Django ,可尝试降

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_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_introduction": ""
}

新建用户

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

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

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

{
    "user_id": 4,"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_introduction": ""
}

删除用户

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

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

使用小结

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

   十分的方便。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读