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简单使用