当前位置: 首页 > news >正文

django+drf+vue 简单系统搭建 (2) - drf 应用

按照本系统设置目的,是为了建立一些工具用来处理简单的文件。

 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_length=50)description = models.CharField(max_length=200,default="")created = models.DateTimeField(default=timezone.now)updated = models.DateTimeField(auto_now=True)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,many=True)return JsonResponse(serializer.data,safe=False)

定义序列化器:

#simpletool/serializers.py
from rest_framework import serializersclass ToolListSerializer(serializers.Serializer):id = serializers.IntegerField(read_only=True)title = serializers.CharField(allow_blank=True,max_length=50)description = serializers.CharField(allow_blank=True)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',namespace='simpletool')),
]

以及

#simpletool/urls.py
from django.urls import path 
from simpletool import viewsapp_name = 'simpletool'urlpatterns = [path('',views.tool_list,name='list'),
]

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,many=True)return Response(serializer.data) elif request.method == 'POST':serializer = ToolListSerializer(data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data,status=status.HTTP_200_OK)return Response(serializer.error,status=status.HTTP_400_BAD_REQUEST)
  • @api_view装饰器允许视图接收GET,POST请求,以及提供如405 Method Not Allowed等默认实现,以便在不同的请求下进行正确的响应。
  • 返回了Response,该对象由Django原生响应体扩展而来,它可以根据内容协商来确定返回给客户端的正确内容类型。如果数据验证有误,还可以返回适当的状态码来表示当前的情况。

上述视图是由于Response提供的内容协商能力。也就是说,Django后端根据客户端请求响应的内容类型不同,自动选择合适的表现形式;浏览器请求资源时,就返回可视化的HTML资源表示,其他形式请求时,又可以返回Json纯数据形式。(可利用httpie验证) 

conda install httpie
http http://127.0.0.1:8000/api/simpletool/

http://www.lryc.cn/news/225217.html

相关文章:

  • 【FastCAE源码阅读7】视图方向切换按钮实现原理
  • 小程序如何设置自取模式下的服务方式
  • 使用数据分析,识别设备异常
  • redis数据倾斜如何解决
  • ATFX汇市:美联储鲍威尔再发鹰派言论,美元指数逼近106关口
  • 【异常----finally和自定义异常】
  • C# OpenCvSharp 环形文字处理 直角坐标与极坐标转换
  • 计算机视觉与深度学习 | 视频/图像转换及保存播放(Matlab源码)
  • 网格变形算法
  • 2. Spark报错,Task is Failed,errorMsg: FileNotFoundException xxxx
  • Flutter开发实战之上传身份照片并认证
  • C++文件加密、解密
  • 使用Java语言实现基本RS触发器
  • c++函数指针作为std::map值
  • data对象内新增属性,console.log()可以打印出来,不重新渲染
  • React:实现一个定时器计数器,每秒自动+1
  • rocksdb 中 db_bench 的使用方法
  • 【前端】TypeScript核心知识点讲解
  • 【工具推荐】一键多平台文章发布神器推荐(免费)
  • PDF有限制密码,不能复制怎么办?
  • 【原创学位论文】基于python和定向爬虫的商品比价系统.docx
  • 【Proteus仿真】【STM32单片机】汽车尾灯控制设计
  • 多线程—锁
  • uniapp使用vue
  • 能源监测管理系统有哪些作用与效果?
  • 数据分析是什么?
  • 【kafka】Java客户端代码demo:自动异步提交、手动同步提交及提交颗粒度、动态负载均衡
  • 【Git】Gui图形化管理、SSH协议私库集成IDEA使用
  • AIX5.3安装weblogic10.3
  • 聊聊logback的FixedWindowRollingPolicy