网站规划建设与管理维护答案,做网站的网络非要专线吗,wordpress使用七牛云加速,app推广平台排行榜按照本系统设置目的#xff0c;是为了建立一些工具用来处理简单的文件。 1. 准备djangorestframework
关于drf的说明请参见#xff1a;Django REST Framework教程 | 大江狗的博客
本系列直接使用drf的序列化等其他功能。
安装
conda install djangorestframework
conda i…按照本系统设置目的是为了建立一些工具用来处理简单的文件。 1. 准备djangorestframework
关于drf的说明请参见Django REST Framework教程 | 大江狗的博客
本系列直接使用drf的序列化等其他功能。
安装
conda install djangorestframework
conda install django-filter
2. 创建工具的app
python manage.py startapp simpletool
创建简单的工具模型
#simpletool/models.pyfrom django.db import models
from django.utils import timezone
# Create your models here.# 工具的model
class simpleTool(models.Model):title models.CharField(max_length50)description models.CharField(max_length200,default)created models.DateTimeField(defaulttimezone.now)updated models.DateTimeField(auto_nowTrue)def __str__(self):return self.title 将app注册列表
# drf_vue_tools/settings.pyINSTALLED_APPS [rest_framework,simpletool,
]
然后要添加DRF的登录视图以便DRF自动为可视化接口页面生成一个用户登录的入口
# drf_vue_tools/urls.py...
from django.urls import includeurlpatterns [...path(api-auth/, include(rest_framework.urls)),
]
最后再迁移数据
python manage.py makemigrations
python manage.py migrate
3. 工具列表接口
工具模型已经定义好现在写视图来查看所有工具
#simpletool/views.py
from django.shortcuts import render
from django.http import JsonResponse
from simpletool.models import simpleTool
#暂时未定义
from simpletool.serializers import ToolListSerializer
# Create your views here.def tool_list(request):tools simpleTool.objects.all()serializer ToolListSerializer(tools,manyTrue)return JsonResponse(serializer.data,safeFalse)
定义序列化器
#simpletool/serializers.py
from rest_framework import serializersclass ToolListSerializer(serializers.Serializer):id serializers.IntegerField(read_onlyTrue)title serializers.CharField(allow_blankTrue,max_length50)description serializers.CharField(allow_blankTrue)created serializers.DateTimeField()updated serializers.DateTimeField()由上可见views中得到所有tools list创建序列化器最后将序列化数据以Json形式返回。
而序列化器种定义的对象与原始models字段基本等同。
最后将各级urls.py 配置好
# drf_vue_tool/urls.py
urlpatterns [path(api/simpletool/,include(simpletool.urls,namespacesimpletool)),
]以及
#simpletool/urls.py
from django.urls import path
from simpletool import viewsapp_name simpletoolurlpatterns [path(,views.tool_list,namelist),
]
4. 创建管理员用户 添加测试数据
python manage.py createsuperuser
可自行设定用户名与密码测试时设置为xiaofan0101,123456
更新admin文件
#simpletool/admin.py
from django.contrib import admin# Register your models here.
import inspect
import sys
from simpletool.models import *cls_members inspect.getmembers(sys.modules[__name__],inspect.isclass)
for name,cls in cls_members:admin.site.register(cls)
运行
python manage.py runserver 手动修改路径进入admin界面,使用管理员用户密码登录。 在simpletool中添加测试数据。 访问api/simpletool页面 5. 序列化器与视图 simpletool/serializers.py 中ToolListSerializer 与Model相似代码感觉重复。DRF中提供了ModelSerializer来解决这个问题。序列化器文件可以修改为
from rest_framework import serializers
from simpletool.models import simpleToolclass ToolListSerializer(serializers.ModelSerializer):class Meta:model simpleToolfields [id,title,created]
ModelSerializer的功能与serializer基本一致不同的是它额外做了些工作
自动推断需要序列化的字段及类型提供对字段数据的验证器的默认实现提供了修改数据需要用到的.create(),.update()方法的默认实现另外我们还可以再fields列表挑选需要的数据以便减少数据体积。
除了对序列化器的支持以外DRF还提供了对视图的扩展以便视图更好的为接口服务。
将文章的视图修改如下
主要的变化如下
from django.shortcuts import render
from django.http import JsonResponse
from simpletool.models import simpleTool
from simpletool.serializers import ToolListSerializerfrom rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
# Create your views here.api_view([GET,POST])
def tool_list(request):if request.method GET:tools simpleTool.objects.all()serializer ToolListSerializer(tools,manyTrue)return Response(serializer.data) elif request.method POST:serializer ToolListSerializer(datarequest.data)if serializer.is_valid():serializer.save()return Response(serializer.data,statusstatus.HTTP_200_OK)return Response(serializer.error,statusstatus.HTTP_400_BAD_REQUEST)
api_view装饰器允许视图接收GETPOST请求以及提供如405 Method Not Allowed等默认实现以便在不同的请求下进行正确的响应。返回了Response该对象由Django原生响应体扩展而来它可以根据内容协商来确定返回给客户端的正确内容类型。如果数据验证有误还可以返回适当的状态码来表示当前的情况。
上述视图是由于Response提供的内容协商能力。也就是说Django后端根据客户端请求响应的内容类型不同自动选择合适的表现形式浏览器请求资源时就返回可视化的HTML资源表示其他形式请求时又可以返回Json纯数据形式。可利用httpie验证
conda install httpie
http http://127.0.0.1:8000/api/simpletool/