前后端分离项目配置流程

1.创建项目和子应用。

2.配置项目:

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','game',  # 注册子应用'rest_framework',  # drf框架'corsheaders',  # 跨域]MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware',# 'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware','corsheaders.middleware.CorsMiddleware',  # 跨域中间件]CORS_ORIGIN_ALLOW_ALL = True # 允许所有源访问DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','HOST': 'localhost','PORT': 3306,'USER': 'root','PASSWORD': 'root','NAME': 'test',}}LANGUAGE_CODE = 'zh-Hans'TIME_ZONE = 'Asia/Shanghai';

3.安装数据库

4.编写模型类

5.迁移、注册表、创建超级用户、添加测试数据

6.路由分发

7.序列化器*

序列化:ORM操作的数据 -> JSON数据 查询

反序列化:JSON数据 -> ORM操作的数据 添加和修改

序列化器:用于实现序列化和反序列化的工具。

 # 在子应用下新建serializers.py文件from rest_framework import serializers  # 导入from game.models import Game# 定义一个普通序列化器,用于处理Game模型类相关的数据class GameSerializer(serializers.Serializer):# 映射字段id = serializers.IntegerField()  # 添加id字段name = serializers.CharField(max_length=20)kind = serializers.CharField(max_length=20)score = serializers.IntegerField()age = serializers.IntegerField()# 实现增加功能时需要实现create方法# validated_data时要添加的数据# ** 拆包def create(self, validated_data):result = Game.objects.create(**validated_data)return result  # 返回结果# 实现更新功能需要实现update方法# instance要更新的orm对象# validated_data去更新这个对象的数据def update(self, instance, validated_data):instance.id = validated_data.get('id')instance.name = validated_data.get('name')instance.kind = validated_data.get('kind')instance.score = validated_data.get('score')instance.age = validated_data.get('age')instance.save()  # 保存更新的数据# 修改数据2中方法 1.update 2.savereturn instance######################################################################## 模型序列化器class GameSerializer2(serializers.ModelSerializer):class Meta:  # 配置元类model = Game   # 指定模型类fields = "__all__"  # 指定字段

8.编写视图*

使用序列化器实现增删改查操作。(查询所有数据、查询单个数据、增加一个数据、修改数据、删除一个数据)

动态路由:删除delete、修改put、查询单个数据get

静态路由:查询所有数据get、增加post

通过分析,使用2个类视图实现增删查改功能。

 # 使用序列化器会用到的参数:instance 实例ORM操作数据   data JSON数据# def func(instance, data)# 调用函数 位置参数: func(instance=a,data=b) -> func(a,b)  func(instance=a)-> func(a)# 调用函数 指定参数: func(data=a, instance=b)  func(data=a)  from django.shortcuts import renderfrom rest_framework.views import APIViewfrom rest_framework.response import Responsefrom game.models import Gamefrom game.serializer import GameSerializer# Create your views here.# 实现游戏角色的查询全部 和 添加class GameView1(APIView):def get(self, request):  # 1# ORM操作数据 -》 json数据  序列化# 获取全部游戏信息 ORM操作数据games_data = Game.objects.all()# 使用序列化器,实现序列化# 多个数据需要加上 many=Trueser = GameSerializer(games_data, many=True)# 注意返回的时ser.data 而不是serreturn Response(ser.data)def post(self, request):  # 2 增加数据# request.data 就是前端提交的json数据# 1.使用序列化器进行反序列化,data参数就是要反序列化的数据ser = GameSerializer(data=request.data)# 2.校验  参数raise_exception=True,出现异常时自动抛出异常if ser.is_valid(raise_exception=True):# 3.保存ser.save()return Response({'msg':'添加数据成功'}, status=201)return Response({'msg': '添加数据失败'}, status=500)# 根据id 实现 单个 查询 修改 删除class GameView2(APIView):def get(self, request, id):  # 3# 根据id获取数据,单个数据try:game_data = Game.objects.get(id=id)except Exception as e:print(e)return Response({'msg':'数据不存在'}, status=404)ser = GameSerializer(game_data)return Response(ser.data, status=200)def put(self, request, id):  # 4 反序列化之更新# 1.获取要更新的数据 ORM操作的数据->instancetry:game_data = Game.objects.get(id=id)except Exception as e:print(e)return Response({'msg':'数据不存在'}, status=404)# 2.反序列化 game_data要更新的orm对象 request.data去更新这个对象的数据ser = GameSerializer(instance=game_data, data=request.data)# 3.校验if ser.is_valid(raise_exception=True):# 4.保存ser.save()return Response({'msg':'更新数据成功'}, status=201)return Response({'msg':'更新数据失败'}, status=500)def delete(self, request, id):  # 5 删除try:Game.objects.filter(id=id).delete()except Exception as e:print(e)return Response({'msg': '删除失败'}, status=404)return Response({'msg': '删除数据成功'}, status=204)

总结:

1.序列化时,将模型类对象(ORM操作的数据)传入instance参数,返回结果时使用的是ser.data属性获取得到。

2.反序列创建时,将前端提交的数据(JSON数据)传给data参数,要使用is_valid进行校验,调用save进行保存。

3.反序列化更新是,将要更新的数据对象(ORM操作数据)传入instance参数,更新后的数据((JSON数据))传入data参数

4.数据多个时,记得加many=True

APIView 怎么写?相关推荐

  1. Django-rest-framework框架之APIView与序列化详解

    今日内容概要 基于APIView+Response写视图类 APIView的执行流程(源码分析) Request类的源码分析 验证不同编码格式提交数据(request.POST) 序列化类的序列化的使 ...

  2. rest-framework:认证组件

    一 认证简介: 只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查看,没有登录,就不能查看,这时候需要用到认证组件 二 局部使用 models.py class Use ...

  3. Python实战案例:高血压项目详解(上)

    Python实战项目 高血压项目详解(上) 涉及内容:爬虫&开发&数学分析&数据挖掘 a.前端界面的技术--> Juqery Mobile (JQM),俗称"机 ...

  4. drf之day05: 2个视图基类,GenericAPIView的属性和方法,基于APIView写5个接口,基于GenericAPIView写5个接口,5个视图扩展类,9个视图子类,视图集

    目录标题 一:2个视图基类 1.GenericAPIView的属性和方法 二:基于APIView写5个接口 三:基于GenericAPIView写5个接口 四:五个视图扩展类 1..基于Generic ...

  5. 使用rest_framework写api接口的一些注意事项(axios发送ajax请求)

    1. 类继承GenericAPIView,定义queryset 印象深刻的事: 由于原来对于继承关系不太清楚,写接口 APIView/泛指GenericAPIView不太关注queryset 没有设置 ...

  6. python连接sqlserver_python 链接sqlserver 写接口实例

    我是使用pymssql完成的sqlserver,首先下载符合版本的pymssql的whl,然后安装,在pycharm的default setting->project Interpreter中确 ...

  7. 我python写的闭包为什么效率很低_GitHub - llzhi001/interview_python_practice: interview 面试题 CS-Notes之ME-技术总结...

    Star过的Github书籍 值得一看的文章 两地书 服务发现 服务注册.服务发现作为构建微服务架构得基础设施环节,重要性不言而喻.在当下,比较热门用于做服务注册和发现的开源项目包括zookeeper ...

  8. restful规范和APIView

    django生命周期 1.先进入wsgi协议的web服务器2.进入django的中间件3.路由4.视图5.取模板,取数据,用数据渲染模板6.返回模板的字符串7.在wsgi中封装后发送给浏览器 开发模式 ...

  9. $Django importlib与dir知识,手写配置文件, 配置查找顺序 drf分页器drf版本控制

    1  importlib与dir知识 # importlib简介动态导入字符串模块 # 常规导入 from ss.aa import b from ss import a print(b,type(b ...

最新文章

  1. django view
  2. 关于splice()方法,slice() 、split()方法讲解,reverse()方法、replace()方法
  3. 【OS学习笔记】三十五 保护模式十:中断描述符表、中断门和陷阱门
  4. 票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案...
  5. android studio 横幅,有关 android studio notification 横幅弹出的功能没有反应
  6. Spring Boot 2.1.5(27)---WebFlux REST API 全局异常处理 Error Handling
  7. android 百度室内地图开发,androidsdk | 百度地图API SDK
  8. LeetCode(944)——删列造序(JavaScript)
  9. win10-如何管理开机启动项?
  10. sybase默认数据库
  11. rails使用html form,在erb文件中使用rails form_tag和html表单代码有什么区别?
  12. 底物的分子描述符计算及 CYP450 酶-底物选择性技术研究
  13. 《脱颖而出——成功网店经营之道》一2.6 连横:返利模式的应用及分销
  14. 《算法笔记》学习日记——5.2 最大公约数与最小公倍数5.3 分数的四则运算5.4 素数
  15. 健康知识大全api 取得最新的知识列表
  16. 做程序员的第八个年头——2021年个人工作总结
  17. 利用Nginx正向代理加速代码编译外网依赖下载速度
  18. linux之下载工具那些事
  19. 梅森公式的推导和探究
  20. python实现中文和unicode转换

热门文章

  1. Redis分布式锁/Redis的setnx命令如何设置key的失效时间(同时操作setnx和expire)
  2. qpython爬虫_python爬虫教程:批量抓取 QQ 群信息
  3. RK3588 RGA 图像操作
  4. windows下两种方法通过cmd进入指定目录
  5. JavaEE进阶——全文检索之Lucene框架
  6. 第 2 课 第二次鸦片战争(1856-1860 年) (咸丰帝在位)
  7. 五大抉择影响女人一生幸福
  8. Flash MX as 声音控制分解
  9. 【机器学习】手写识别系统
  10. 苏州博物馆计算机系统操作工,行车及铁钢包调度系统在炼钢厂应用.doc