drf 单表
^_^
# [{title,price},{}] 构造的数据结构 简单的FBV/CBV
def showbooks(request): # FBV
if request.method =='GET':
books_list = models.Book.objects.all()
l1 =[] # 列表
for book_obj in books_list:
d1 = {}
d1['title'] = book_obj.title
d1['price'] = book_obj.price
l1.append(d1)
return HttpResponse(json.dumps(l1,ensure_ascii=False)) #结局中文编码
class BookHandle(View): # CBV
#url - view -- 自己创建的类中dispatch (View dispatch) 反射找到对应请求方式的方法
def dispatch(self, request, *args, **kwargs):
res = super().dispatch(request, *args, **kwargs)
return res
def get(self,request):
books_list = models.Book.objects.all()
l1 =[]
for book_obj in books_list:
d1 = {}
d1['title'] = book_obj.title
d1['price'] = book_obj.price
l1.append(d1)
# return HttpResponse(json.dumps(l1,ensure_ascii=False))
return render(request,'login.html')
def post(self,request):
print(request.POST)
return HttpResponse('ok')
# 一个 django 提供的序列化组件
from django.shortcuts import render,HttpResponse,redirect
import json
from django.views import View
from app01 import models
from rest_framework import APIView
from django.core.serializers import serialize
from rest_framework.response import Response
class BookHandle(APIView):
def get(self,request):
books_list = models.Book.objects.all()
cs = serialize('json',books_list,ensure_ascii=False) #解决中文问题
return Response(cs)
# json 序列化时间日期格式的时候的方法
import json
from datetime import datetime
from datetime import date
#对含有日期格式数据的json数据进行转换
class JsonCustomEncoder(json.JSONEncoder):
def default(self, field):
if isinstance(field,datetime):
return field.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(field,date):
return field.strftime('%Y-%m-%d')
else:
return json.JSONEncoder.default(self,field) d1 = datetime.now() dd = json.dumps(d1,cls=JsonCustomEncoder)
print(dd)
# drf 序列化组件
from django.shortcuts import render,HttpResponse,redirect
import json
from django.views import View
from app01 import models
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import serializers
#from rest_framework import status #返回指定状态码的时候会用到
#return Response(se_data,status=status.HTTP_400_BAD_REQUEST)
#或者这种方式返回来指定状态码:return JsonResponse(serializer.data, status=201) class BookSerializer(serializers.Serializer): # 类 models.Model
title = serializers.CharField(max_length=22) # 必要字段的话required = False
price = serializers.IntegerField() class BookHandle(APIView): def get(self,request):
books_list = models.Book.objects.all()
cs = BookSerializer(books_list,many=True)
print(cs.data) # QuerySet 对象 要用many=Ture
return Response(cs.data) def post(self, request):
print(request.data)
cs = BookSerializer(data=request.data,many=False) #dict 类型
print(cs.is_valid()) # 布尔值
if cs.is_valid():
models.Book.objects.create(**cs.data)
return HttpResponse(cs.data)
else:
print(cs.errors)
return Response(cs.errors)
一套简易流程 -- drf 以及接口规范
首先按照restful规范咱们创建一些api接口,按照下面这些形式写吧:
Courses --- GET ---> 查看数据----->返回所有数据列表[{},{},]
Courses--- POST --->添加数据 -----> 返回添加的数据{ }
courses/ ---PUT---> 更新pk=1的数据 ----->返回更新后的数据{ }
courses/ --- DELETE---> 删除pk=1的数据 -----> 返回空
courses/ --- GET --->查看单条数据 -----> 返回单条数据 { }
我们先看一个drf给我们提供的一个类似于Postman功能的页面,首先我们创建一个django项目,创建一个Course表,然后添加一些数据
一 引入drf 的Response对象
from django.shortcuts import render,HttpResponse,redirect
import json
from django.views import View
from app01 import models
from rest_framework.views import APIView
from rest_framework.response import Response
# CBV视图
class CourseView(APIView):
def get(self,request):
course_obj_list = models.Course.objects.all()
ret = []
for course_obj in course_obj_list:
ret.append({
"title":course_obj.title,
"desc":course_obj.desc,
}) return Response(json.dumps(ret, ensure_ascii=False)) #这里使用Response来返回消息 def post(self,request):
print(request.data)
return HttpResponse('POST')
二 在settings.py 里面注册 APP
INSTALLED_APPS = ['rest_framework', #将它注册成App] 三 配置路由
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^courses/', views.CourseView.as_view(),name='courses'),
] 四 启动项目,浏览器访问路由,在这里面可以发送不同的请求,看到对应的相应数据,类似于postman,建议使用postman
表查询 一对一与一对多的区别 一对一就是一对多张外键加unique
drf 单表的更多相关文章
- DRF单表序列化和反序列化
安装 djangorestframework pip install djangorestframework 将rest_framework注册到app上 INSTALLED_APPS = [ 're ...
- MYSQL基础操作之单表的增删改查
一.添加数据. -- 1.创建表,并插入一定的数据. CREATE TABLE STUDENT( ID INT, USERNAME ), SERVLET INT, JSP INT, ADDRESS ) ...
- SQLSERVER单表CRUD通用方法
一.适用场景 ①当你书写简单的增删改查心累了 ②当你的项目不考虑并发.高性能 ③当你追求更快速的开发效率 ④当你的业务只涉及单表 二.代码展示 ①单表Insert public bool Insert ...
- Mysql常用表操作 | 单表查询
160905 常用表操作 1. mysql -u root -p 回车 输入密码 2. 显示数据库列表 show databases 3. 进入某数据库 use database data ...
- MySQL单表百万数据记录分页性能优化
背景: 自己的一个网站,由于单表的数据记录高达了一百万条,造成数据访问很慢,Google分析的后台经常报告超时,尤其是页码大的页面更是慢的不行. 测试环境: 先让我们熟悉下基本的sql语句,来查看下我 ...
- hibernate单表junit测试
首先,创建java project ,导入需要的jar包 添加hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8'?> <!D ...
- 学习MySQL之单表操作(二)
##单表操作 ##创建表 CREATE TABLE t_employee( empno ), ename ), job ), MGR ), Hiredate DATE DEFAULT '0000-00 ...
- 【Java EE 学习 44】【Hibernate学习第一天】【Hibernate对单表的CRUD操作】
一.Hibernate简介 1.hibernate是对jdbc的二次开发 2.jdbc没有缓存机制,但是hibernate有. 3.hibernate的有点和缺点 (1)优点:有缓存,而且是二级缓存: ...
- Ajax省市区无刷新单表联动查询
方法一: 在很多时候都需要用到无刷新级联查询,本文将以省市区的级联查询作为例子.注:此为单表三级联动 环境:Vistual Studio 2015 .MSSQL 1.首先下载AjaxControlTo ...
随机推荐
- Linux——模拟实现一个简单的shell(带重定向)
进程的相关知识是操作系统一个重要的模块.在理解进程概念同时,还需了解如何控制进程.对于进程控制,通常分成1.进程创建 (fork函数) 2.进程等待(wait系列) 3.进程替换(exec系列) 4 ...
- HTML5_canvas 画布
<canvas></canvas> 画布 <canvas id="my_canvas" width="400" height=&q ...
- js高级1
1.每一个元素身上的事件都是天生自带的,不需要我们去定义,只需要我们给这个事件绑定的方法,当事件触发的时候就会执行这个方法. 2.事件绑定的方法 1,div.onclick=function(){} ...
- 团队项目-课程MS需求分析心得
我们的课程管理项目需求讲道理其实应该是比较简单的,但是在经过几次和老师讨论过后,项目需求已经多得让人脑门疼,后来继续跟老师聊,老师嘴上说着减减减,但是每次讨论下来需求还是会变得更多,以致于个人已经不再 ...
- vue中打包后vendor文件包过大
vue中webpack打包后vendor.xxx.js文件一般都特别大,其原因是因为我们引用的依赖都被压缩成一个js文件,这样会导致vendor文件过大.页面加载速度过慢,影响用户体验.所以我们就要把 ...
- vue设置背景图片
现在data里面定义: note: { backgroundImage: "url(" + require("../../assets/home/bigdatabak.p ...
- netstat lsof ps 常用场景
1.netstat 命令可以帮助检查本机的网络状况实战应用1:公司内部的一个老服务运行在192.168.1.1:50060上,服务将于一周之后停用,再在要查一下本机上有没有进行在调用该服务.[root ...
- 解决配置Windows Update失败问题
大家都清楚电脑总是需要更新一些补丁,不过,很多系统用户发现更新了补丁之后,开机会出现windows update更新失败的情况,提示“配置Windows Update失败,还原更改,请勿关闭计算机”信 ...
- nodeJs和JavaScript的异同(转)
原文:https://blog.csdn.net/lazycode_cat/article/details/61916291 JavaScript组成:ECMAScript(定义这门语言的基础,比如语 ...
- Spark 学习笔记
Spark的前世今生 基础语法详解 3.条件控制与循环 4.函数入门 5.函数入门之默认参数 6.函数入门之边长参数 7.函数入门之过程lazy值和异常 8.数组操作之Ar ...