图书管理系统:

实现图书接口的增、删、改、查

方式一:普通的方式

views配置:

 #Book的增、删、改、查接口

 class BookSerializer(serializers.ModelSerializer):
class Meta:
model = models.Book
fields = '__all__'
depth = 1 #对get、post请求进行封装
#查看所有图书
class List():
def list(self): ret=self.query_set.objects.all()
ser=self.serila(instance=ret,many=True)
return Response(ser.data)
#创建图书
class Create():
def create(self,request):
back_msg = {'status': 0, 'data': None, 'msg': '错误'}
ser = BookSerializer(data=request.data)
if ser.is_valid():
ser.save()
back_msg['data'] = ser.data
back_msg['status'] = 1
back_msg['msg'] = '创建成功'
return Response(back_msg) #创建书籍类,包含get、post方法(继承上面的List和Create类)
class Book(APIView,List,Create):
query_set=models.Book
serila=BookSerializer
def get(self,request):
return self.list()
def post(self,request):
return self.create(request) #查看(查看单本书)、更新、删除
class BookDetail(APIView):
def get(self,request,pk):
ret= models.Book.objects.filter(pk=pk).first()
ser=BookSerializer(instance=ret,many=False)
return Response(ser.data)
def put(self,request,pk):
ret = models.Book.objects.filter(pk=pk).first()
ser=BookSerializer(instance=ret,data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.data)
def delete(self,request,pk):
models.Book.objects.filter(pk=pk).delete()
return HttpResponse('删除成功')

settings配置:

 REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': ['rest_framework.parsers.JSONParser', 'rest_framework.parsers.FormParser']
}

备注:views里面局部的配置信息如下

 #RESTfu自带的处理请求的模块方法
from rest_framework.parsers import JSONParser,FormParser #JSONParser,FormParser局部解析器,一般只需要写一个就行
class Book(APIView): #解析器:对浏览器发送post请求过来的数据类型做解析
#当指向下面post请求,运行request.data的时候才会去执行解析器
parser_classes = [JSONParser,FormParser] def get(self,request): #request是已经处理好的request ret = models.Book.objects.all()
print(ret,type(ret)) #ret是QuerySet对象 <class 'django.db.models.query.QuerySet'> # 实例化上面的BookSerializer拿到一个book_ser对象
# BookSerializer参数(ret:queryset对象,many=True代表序列化多条,many=False 代表序列化一条)
book_ser=BookSerializer(ret,many=True)
#book_ser.data不是json格式的字符串,而是个字典
#所以Response内部一定是对book_ser.data做了序列化
return Response(book_ser.data) def post(self,request):
print('')
print(request.data)
return HttpResponse('ok') # 杂乱内容整理:
# print(request.POST)
#对请求过来的数据进项验证,检验每个字段是否符合录入要求,并保存
ser = BookSerializer(data=request.data) #post请求过来数据符合每个字段要求,就允许写入数据库
if ser.is_valid():
ser.save()
return Response(ser.save()) #不符合要求就返回错误信息
else:
print(ser.errors) return HttpResponse(json.dumps(ser.errors))

RESTful自带的模块(处理请求的数据格式)

models配置:

 from django.db import models

 # Create your models here.

 from django.db import models

 class Book(models.Model):
title=models.CharField(max_length=32)
price=models.IntegerField()
pub_date=models.DateField()
publish=models.ForeignKey("Publish")
authors=models.ManyToManyField("Author") def __str__(self):
return self.title #我了验证可以覆盖重写字段的方法
def test(self):
return '' class Publish(models.Model):
name=models.CharField(max_length=32)
email=models.EmailField()
# def __str__(self):
# return self.name class Author(models.Model):
name=models.CharField(max_length=32)
age=models.IntegerField()
def __str__(self):
return self.name

设计数据库表字段信息

url路由配置:

urlpatterns = [
url(r'^admin/', admin.site.urls),
#查看所有图书url(查看所有图书)
url(r'^book/$', views.Book.as_view()),
#指定具体查看某一本书信息(查看、更新、删除等)
url(r'^book/(?P<pk>\d+)', views.BookDetail.as_view()),
]

方式二:实现作者的增删改查

views配置:

 #作者的增删改查
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = models.Author
fields='__all__'
depth = 1 from rest_framework import mixins
from rest_framework.generics import GenericAPIView
#整合了方法一中的List、Create
class Authors(GenericAPIView,mixins.CreateModelMixin,mixins.ListModelMixin):
queryset = models.Author.objects.all()
serializer_class = AuthorSerializer def get(self,request):
return self.list(request)
def post(self,request):
return self.create(request) #设置查看单条数据详情
class AuthorsDetail(APIView):
def get(self,request,pk):
ret=models.Author.objects.filter(pk=pk).first()
ser=AuthorSerializer(instance=ret,many=False)
return Response(ser.data)
#更新单条作者信息
def put(self,request,pk):
ret=models.Author.objects.filter(pk=pk).first()
ser=AuthorSerializer(instance=ret,data=request.data) #注意这里是先拿到新的文件,去覆盖旧的文件
print('即将更新一个出版社信息')
if ser.is_valid():
ser.save()
return Response(ser.data)
#删除单条作者信息
def delete(self,request,pk):
ret=models.Author.objects.filter(pk=pk).delete()
return HttpResponse('删除成功')

url路由配置:

 urlpatterns = [
url(r'^admin/', admin.site.urls),
#查看所有作者
url(r'^authors/$', views.Authors.as_view()),
#查看指定单个作者详情
url(r'^authors/(?P<pk>\d+)', views.AuthorsDetail.as_view()), ]

方式三:

RESTful-rest_framework视图层-第三篇的更多相关文章

  1. 8、Django之模型层第三篇:更多字段与参数

    1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...

  2. Django框架之第三篇(路由层)--有名/无名分组、反向解析、路由分发、名称空间、伪静态

    一.Django请求生命周期 二.路由层  urls.py url()方法 第一个参数其实就是一个正则表达式,一旦前面的正则匹配到了内容,就不会再往下继续匹配,而是直接执行对应的视图函数. djang ...

  3. Django框架之第四篇(视图层)--HttpRequest对象、HttpResponse对象、JsonResponse、CBV和FBV、文件上传

    视图层 一.视图函数 一个视图函数,简称视图,是一个简单的python函数,它接收web请求并且会返回web响应.响应可以是一张网页的html,一个重定向,或者是一张图片...任何东西都可以.无论是什 ...

  4. Python之路【第二十八篇】:django视图层、模块层

    1.视图函数 文件在view_demo 一个视图函数简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XM ...

  5. 第十二篇视图层之视图函数(views)-三件套

    视图层之视图函数(views) 阅读目录(Content) 视图层之视图函数(views) 一个简单的视图 HttpRequest HttpResponse redirect 函数 对比render与 ...

  6. 【Django】 视图层说明

    [Django视图层] 视图层的主要工作是衔接HTTP请求,Python程序和HTML模板,使他们能够有机互相合作从模型层lou到数据并且反馈.说到视图层的工作就有以下几个方面要说 ■ URL映射 对 ...

  7. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  8. Django视图层、虚拟环境

    一.虚拟环境安装 目的:为了解决版本共存问题 ''' 1.通过pip3安装虚拟环境: -- pip3 install virtualenv 2.前往目标文件夹: -- cd 目标文件夹 (C:\Vir ...

  9. 第三篇 功能实现(1) (Android学习笔记)

    第三篇 功能实现(1) 第8章 Android应用程序组成 ●Android的一些中.底层基础知识 ※ Android Framework 启动过程 Android手机系统本质上是一个基于Linux的 ...

随机推荐

  1. spark集群配置细则总结

    修改目录与目录组: sudo chown -R hadoop:hadoop spark-1.6.1-bin-hadoop2.6 sudo chown -R hadoop:hadoop jdk1.8.0 ...

  2. 【Python音乐生成】这是一个超棒的dataset

    http://colinraffel.com/projects/lmd/

  3. IOS segue(跳转页面处理)

    ● Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue) Segue的属性 ● 每一个Segue对象,都有3个属性 ➢ 唯一标识 @prope ...

  4. 利用kvo实现列表倒计时

    自己稍微记录一下,方便以后用到: 先创建一个定时器的类: #import "TimeCenter.h" @interface TimeCenter () @property (no ...

  5. javaweb基础(32)_jdbc学习入门

    一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...

  6. Spring @Transactional 浅谈

    一般当我们在一个方法里面操作多个数据对象的可持久化操作时,我们通常这些操作能够成功一起事务提交成功.默认情况下,数据库处于自动提交模式.每一条语句处于一个单独的事务中,在这条语句执行完毕时,如果执行成 ...

  7. python用requests请求,报SSL:CERTIFICATE_VERIFY_FAILED错误。

    response = requests.request("GET", url, headers=headers, params=querystring, verify=False) ...

  8. LAMP 一键部署

    LAMP 一键部署 部署http #!/bin/bash ### global variables export lamp_repo=http://192.168.1.5/lamp/ export l ...

  9. js浮点数加减乘除

    浮点数精确计算 /** ** 加法函数,用来得到精确的加法结果 ** 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显.这个函数返回较为精确的加法结果. ** 调用:ac ...

  10. 数据存储之使用mysql数据库存储数据

    推荐安装mysql5.7环境: 官网下载:https://dev.mysql.com/downloads/installer/5.7.html 如果提示没有.NET Framework框架.那么就在提 ...