django基于restframework的CBV封装
一.models数据库映射
from django.db import models # Create your models here.
class Book(models.Model):
title=models.CharField(max_length=32)
price=models.IntegerField()
pub_date=models.DateField()
publish=models.ForeignKey(to="Publish")
authors=models.ManyToManyField(to="Author")
def __str__(self):
return self.title 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
二.serializers序列化
from rest_framework import serializers
from app01 import models
from rest_framework import exceptions class BookSerialize(serializers.ModelSerializer):
class Meta:
model = models.Book
fields = "__all__" publish = serializers.SerializerMethodField()
authors = serializers.SerializerMethodField() def get_publish(self, obj):
return {"publish_id": obj.publish.pk, "publish_name": obj.publish.name} def get_authors(self, obj):
author_list = obj.authors.all()
lis = [{"name": author.name, "age": author.age} for author in author_list]
return lis def validate_title(self, value):
if value.startswith("sb"):
raise exceptions.ValidationError('你使用了不合适的文字')
return value
三.url路由
from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^books/$', views.Books.as_view()),
]
四.Views视图类
主要就是将CBV的几个get,post请求方法进行封装,以后创建其他的新的CBV,直接继承调用就可以了,可以减少代码冗余
from app01 import models
from rest_framework.response import Response
from rest_framework.views import APIView
from app01.serialize_module import BookSerialize # 自定义一个response类,方便CBV使用
class MyResponse():
def __init__(self):
self.status = 100
self.msg = None # 将类方法装饰成属性
@property
def get_dic(self):
return self.__dict__ # 封装CBV类
# 将get请求封装在List类中
class List():
def get_list(self, request,*args,**kwargs):
response = MyResponse()
try:
handler_list = self.model.objects.all()
handler_ser = self.serializer(instance=handler_list, many=True)
response.handler = handler_ser.data
response.msg = "获取成功"
except Exception as e:
response.msg="获取失败"
response.error=str(e)
return Response(response.get_dic) # 将post请求封装在Create类中
class Create():
def save(self, request,*args,**kwargs):
response = MyResponse()
try:
handler_ser = self.serializer(data=request.data)
if handler_ser.is_valid():
handler_ser.save()
response.msg = "添加成功"
else:
response.status = 101
response.msg = "添加失败"
response.error = handler_ser.errors
except Exception as e:
response.msg = "添加失败"
response.error=str(e)
return Response(response.get_dic) # book类继承List,Create,APIView
class Books(List,Create,APIView):
model=models.Book
serializer=BookSerialize
# 此时调用get方法时,只要使用List类中的get_list方法就行了
def get(self,request):
return self.get_list(request) # 此时调用post方法时,只要使用Create类中的save方法就行了
def post(self,request):
return self.save(request)
django基于restframework的CBV封装的更多相关文章
- 通过django的rest-framework……(CBV)
为什么不使用FBV,因为CBV重用性很高 先看一个例子: from django.views.generic.base import View from django.http import Http ...
- Python学习---django知识补充之CBV
Django知识补充之CBV Django: url --> def函数 FBV[function based view] 用函数和URL进行匹配 url --> ...
- Django 反向解析 request CBV
正则路径中的分组 无名分组 分组的概念:就是给某一段正则表达式用小括号括起来 无名分组按位置传参数,一一对应. view中除去request,其他形参数量要与urls中分组数量一致. 无名分组就是将括 ...
- Django基础七之CBV装饰器和中间件
Django基础七之CBV装饰器和中间件 目录 Django基础七之CBV装饰器和中间件 1. CBV加装饰器 2. Django中间件 2.1 Django中间件介绍 2.2 自定义中间件 2.2. ...
- Android基于Retrofit2.0 +RxJava 封装的超好用的RetrofitClient工具类(六)
csdn :码小白 原文地址: http://blog.csdn.net/sk719887916/article/details/51958010 RetrofitClient 基于Retrofit2 ...
- 基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil
基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil,把日常能用到的各种CRUD都进行了简化封装,让普通程序员只需关注业务即可,因为非常简单,故直接贴源代码,大家若需使用可以直 ...
- Django基于正则表达式的URL(2)
Django基于正则表达式的URL(2) 1. 关于正则的说明 url(r'^detail-(\d+)-(\d+).html',views.detail), 当客户端输入 127.0.0.1:8000 ...
- 简单的基于promise的ajax封装
基于promise的ajax封装 //调用方式: /* ajaxPrmomise({ url:, method:, headers:{} }).then(res=>{}) */ ;(functi ...
- C#工具类OracleHelper,基于Oracle.ManagedDataAccess.Client封装
基于Oracle.ManagedDataAccess.Client封装的Oracle工具类OracleHelper,代码如下: using System; using System.Data; usi ...
随机推荐
- /dev被异常删除的问题
今天遇到一个问题,在执行某些操作后,发现经常报“read_urandom: /dev/urandom: open failed: No such file or directory”这个错误.后来查看 ...
- 18个Python高效编程技巧,Mark!
初识Python语言,觉得python满足了我上学时候对编程语言的所有要求.python语言的高效编程技巧让我们这些大学曾经苦逼学了四年c或者c++的人,兴奋的不行不行的,终于解脱了.高级语言,如果做 ...
- 设计模式笔记:开闭原则(OCP,The Open-Closed Principle)
1. 开闭原则概述 开闭原则(OCP,The Open-Closed Principle)两个主要特征: (1)对扩展开放(open for extension):模块的行为的可以扩展的,当应用的需求 ...
- SSM+shiro,所有配置文件,详细注释版,自用
spring配置文件applicationContext.xml,放在resources下 <?xml version="1.0" encoding="UTF-8& ...
- 获取DataSet中某行某列的数据
LabelText = DataSet11.Tables("COMM.USERS").Rows[0]["User_Name"].tostring() Label ...
- python之对字符串类型的数组求平均值
该字符串是在网页表格中复制的,所以数字间由制表符间隔,先将其转换成列表,再进行统计计算.代码如下: str = "-18.1 -18.3 -18 -18.2 -18 -17.4 -18 -1 ...
- RBS SharePoint 2010 Server.wmv
视频地址: https://www.youtube.com/watch?v=DXi2er514iA&feature=youtu.be
- python之旅六【第六篇】模块
json和pickle 用于序列化的两个模块json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进行转换 json模块提供了四 ...
- Sublime Text ——3200破解补丁
声明 该资源来源于网络,只为学习交流使用,侵权联系删除.长期使用和觉得sublime text 不错的话,还望购买授权码,多多支持正版!!! 重要的事情说三遍 请支持正版!!! 请支持正版!!! 请支 ...
- 【XSY2719】prime 莫比乌斯反演
题目描述 设\(f(i)\)为\(i\)的不同的质因子个数,求\(\sum_{i=1}^n2^{f(i)}\) \(n\leq{10}^{12}\) 题解 考虑\(2^{f(i)}\)的意义:有\(f ...