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 ...
随机推荐
- JAVA新的一天
在2019/03/22/今天里,荣幸成为这个班级的一员,认识了新的小伙伴们,上午由老师大体说了一下java的理念,下午安装了DW编辑器,以及讲解了HTML的基本构造,和标签的使用,即使以前学习过,这次 ...
- javascript的数组之map()
map()方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的回调函数后返回的结果.新数组 // ES6 let numbers = [1, 5, 10, 15]; let doubles ...
- oracle中查询用户信息
1.查看所有用户: select * from dba_users; select * from all_users; select * from user_users; 2.查看用户或角色系统权限( ...
- Linux下查找某一文件常用的方式
当我们需要在ubuntu中找到之前的某一个文件,该用什么方式呢?用以下命令你就可以快速定位: find / -name "pycharm.sh" 用find查找这个命令,确定查找范 ...
- SVN 服务器端权限管理
创建用户 点击菜单上的Users可以在右侧窗口区域中看见已经创建的用户 创建组 同样也可以修改组: 分配权限 示例一:开发人员拥有读写权限(组权限) 进入权限分配界面: 添加组或用户: 在添加页面可 ...
- [dev][dpdk][crypto] dpdk加解密设备与IPSEC
概述 分三部分,加解密框架(crypto framework),加解密设备(crypto dev),安全协议(Security Framework) × API,设计思路等,都在加解密框架里:见文档 ...
- Android的SQlite的使用
Android系统集成了一个轻量级的数据库:SQlite.SQlite不像Oracle.MySQl数据库那样需要安装.启动服务器进程,SQLite数据库只是一个文件 实例1:向数据库里插入数据 主界面 ...
- vim模式下报错E37: No write since last change (add ! to override)
故障现象: 使用vim修改文件报错,系统提示如下: E37: No write since last change (add ! to override) 故障原因: 文件为只读文件,无法修改. 解决 ...
- Vue项目在开发环境跨域和生成环境部署跨域问题解决
一.在dev环境下的跨域问题解决1.项目使用的是axios请求网络,将baseUrl修改为/api (这里是使用webpack提供的代理功能将/api代理成目标接口host) axios.defaul ...
- springcloud第五步:使用Zuul搭建服务接口网关
路由网关(zuul) 什么是网关 Zuul的主要功能是路由转发和过滤器.路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务.zuul默认和Ri ...