当前位置: 首页 > 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/

相关文章:

  • 3D全景技术,为我们打开全新宣传领域
  • HBase导出建表语句
  • 怎样使用ovsyunlive在web网页上直接播放rtsp/rtmp视频
  • GZ038 物联网应用开发赛题第2套
  • 麒麟KYLINIOS软件仓库搭建03-软件仓库添加新版本的软件包
  • 客户服务质量提升的三种思路
  • C# WebSocket 服务器
  • zookeeper:服务器有几种状态?
  • 顶板事故防治vr实景交互体验提高操作人员安全防护技能水平
  • AI:73-结合语法知识的神经机器翻译研究
  • ChatGPT是什么?黑客试图淹没其服务
  • sqlplus set参数大区
  • Flutter开发实战之上传身份照片并认证
  • 打开知识大门,电大搜题助您迈向成功
  • 网络安全——
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 2019年如何成为全栈工程师?
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Android组件 - 收藏集 - 掘金
  • ComponentOne 2017 V2版本正式发布
  • CSS盒模型深入
  • httpie使用详解
  • Median of Two Sorted Arrays
  • PermissionScope Swift4 兼容问题
  • PHP变量
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Redis学习笔记 - pipline(流水线、管道)
  • SpiderData 2019年2月16日 DApp数据排行榜
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 机器学习学习笔记一
  • 基于遗传算法的优化问题求解
  • 利用jquery编写加法运算验证码
  • 十年未变!安全,谁之责?(下)
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 使用putty远程连接linux
  • 用jQuery怎么做到前后端分离
  • 自制字幕遮挡器
  • FaaS 的简单实践
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #1014 : Trie树
  • #大学#套接字
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (ZT)一个美国文科博士的YardLife
  • (二开)Flink 修改源码拓展 SQL 语法
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)memcache、redis缓存
  • (转)Mysql的优化设置
  • (转)原始图像数据和PDF中的图像数据
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .form文件_SSM框架文件上传篇
  • .NET CLR Hosting 简介