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 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 后,一个接口,三行代码就可以完整增删改查等操作。
十分的方便。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|