AI智能
改变未来

djangorestframework简单使用


djangorestframework

   该模块是

Django

在对

FrameWork

规范的一种支持,可以让我们快速的编写出符合

FrameWork

规范的接口。

   使用

pip

命令进行安装,如提示安装失败可查询

djangorestframework

Django

版本的对应关系,如果你使用旧版

Django

,可尝试降低

djangorestframework

的版本号。

pip install djangorestframework

基本使用

注册drf

   当下载完成后,需要在

settings.py

中注册

drf

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

创建模型表

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

from django.db import modelsclass 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 UserModelSerialize56cr(ModelSerializer):class Meta:model = User  # 指定序列的模型表fields = \"__all__\"  # 序列化该表中所有字段

书写API

   下面就开始书写

API

了,

API

统一采用

CBV

的形式进行书写。

from django.shortcuts import renderfrom .models import Userfrom .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 urlfrom django.contrib import adminfrom rest_framework.routers import DefaultRouter  # 导入drf的默认路由from app01 import viewsurlpatterns = [url(r\'^admin/\', admin.site.urls),]router = DefaultRouter()  # 处理视图的路由器router.register(\"user\",views.Users)  # 注册视图集urlpatterns.extend(router.urlad8s)  # 路由合并

可能的问题

   如果你链接的是

mysql

数据库,可能会提示你的

pymysql

版本问题。

   此时只需要在项目全局文件夹下的

__init__.py

文件中,添加下面三句代码:

import pymysqlpymysql.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,也126a必须传入完整的#     \"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

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

   十分的方便。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » djangorestframework简单使用