多种view视图和序列化--django2
models.py
from django.db import models # Create your models here.
class Idc(models.Model):
name = models.CharField("机房名称",max_length=)
address = models.CharField("机房地址",max_length=)
phone = models.CharField("联系人",max_length=)
email = models.EmailField("邮件地址",default="null")
letter = models.CharField("IDC简称",max_length=) def __str__(self):
return self.name class Meta:
db_table = 'resources_idc'
models.py
serializers.py
from rest_framework import serializers
from .models import Idc class IdcSerializer(serializers.Serializer):
"""
Idc 序列化类
"""
id = serializers.IntegerField(read_only=True)
name = serializers.CharField(required=True, max_length=32)
address = serializers.CharField(required=True, max_length=256)
phone = serializers.CharField(required=True, max_length=15)
email = serializers.EmailField(required=True)
letter = serializers.CharField(required=True, max_length=5) #必须有create,才能使用save(), data={...} a=IdcSerializer(data=data) a.save()
def create(self, validated_data):
return Idc.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.name = validated_data.get("name", instance.name)
instance.address = validated_data.get("address", instance.address)
instance.phone = validated_data.get("phone", instance.phone)
instance.email = validated_data.get("email", instance.email)
instance.save()
return instance
serializers.py
版本一 :APIView
自己写get、post等方法
urlpatterns = [
url("^$", views.api_root),
url("^idcs/$", views.IdcList.as_view(), name="idc-list"),
url("^idcs/(?P<pk>[0-9]+)/$", views.IdcDetail.as_view(), name="idc_detail")
]
urlpatterns = format_suffix_patterns(urlpatterns)
from rest_framework.views import APIView
from django.http import Http404 class IdcList(APIView):
def get(self, request, format=None):
queryset = Idc.objects.all()
serializer = IdcSerializer(queryset, many=True)
return Response(serializer.data) def post(self, request, format=None):
serializer = IdcSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.data, status=status.HTTP_400_BAD_REQUEST) class IdcDetail(APIView): def get_object(self, pk):
try:
return Idc.objects.get(pk=pk)
except Idc.DoesNotExist:
raise Http404 def get(self, request, pk, format=None):
idc = self.get_object(pk)
serializer = IdcSerializer(idc)
return Response(serializer.data) def put(self, request, pk, format=None):
idc = self.get_object(pk)
serializer = IdcSerializer(idc, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_404_NOT_FOUND) def delete(self, request, pk, format=None):
idc = self.get_object(pk)
idc.delete()
return HttpResponse(status=status.HTTP_204_NO_CONTENT)
版本二:使用混合类(generics.GenericAPIView+mixins.RetrieveModelMixin)实现
需要自己重复写get、post方法,因为ListModelMixin没有写get方法
from rest_framework import generics
from rest_framework import mixins class IdcList_V4(generics.GenericAPIView,
mixins.ListModelMixin,
mixins.CreateModelMixin):
queryset = Idc.objects.all()
serializer_class = IdcSerializer def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs) def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
class IdcDetail_V4(generics.GenericAPIView,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin):
queryset = Idc.objects.all()
serializer_class = IdcSerializer def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs) def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs) def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
版本三:viewset(viewsets.GenericViewSet+mixins)扩展实现
将所有请求用一个class实现,如:GenericViewSet+ListModelMixin
get请求绑定到list之上,post绑定到create
########################## 版本六 ############################
from rest_framework import viewsets class IdcListViewset(viewsets.GenericViewSet,
mixins.ListModelMixin,
mixins.RetrieveModelMixin,
mixins.DestroyModelMixin,
mixins.UpdateModelMixin,
mixins.CreateModelMixin):
queryset = Idc.objects.all()
serializer_class = IdcSerializer
urls.py绑定参数:
idc_list = views.IdcListViewset.as_view({
"get": "list",
"post": "create"
}) idc_detail = views.IdcListViewset.as_view({
"get": "retrieve",
"put": "update",
"delete": "destroy"
})
urlpatterns = [
#url("^$", views.api_root),
url("^idcs/$", idc_list, name="idc-list"),#此时,url中不需要再加as_view()了
url("^idcs/(?P<pk>[0-9]+)/$", idc_detail, name="idc_detail")
]
或者用router实现自动绑定get 和list,create 和 post等等
from rest_framework.routers import DefaultRouter # 导入
from django.urls import path
#实例化router
router = DefaultRouter()
# 注册idc
router.register(r'idc', IdcListViewset, base_name="idcs")
urlpatterns = [
# router的path路径
path('', include(router.urls)),
]
版本四:使用高级混合(generics.ListCreateAPIView等)实现
父类包含具体请求方式,如:ListCreateAPIView包括了get
urlpatterns = [
url("^$", views.api_root),
url("^idcs/$", views.IdcList_V5.as_view(), name="idc-list"),
url("^idcs/(?P<pk>[0-9]+)/$", views.IdcDetail_V5.as_view(), name="idc_detail")
]
urlpatterns = format_suffix_patterns(urlpatterns)
from rest_framework import generics
class IdcList_V5(generics.ListCreateAPIView):#包括查找和创建
queryset = Idc.objects.all()
serializer_class = IdcSerializer
class IdcDetail_V5(generics.RetrieveUpdateDestroyAPIView): #包括 详细查找 、更新和删除
queryset = Idc.objects.all()
serializer_class = IdcSerializer
版本五: ModelViewSet(router)实现:
整合:ModelViewSet包括所有方法
########################## 版本七 ############################
from rest_framework.routers import DefaultRouter route = DefaultRouter()
route.register("idcs", views.IdcViewset_v7)
urlpatterns = [
url(r'^', include(route.urls))
]
class IdcViewset_v7(viewsets.ModelViewSet):
queryset = Idc.objects.all()
serializer_class = IdcSerializer
多种view视图和序列化--django2的更多相关文章
- Django的View(视图)和路由系统
一.Django的View(视图) 1.介绍 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一 ...
- 8、ASP.NET MVC入门到精通——View(视图)
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 View视图职责是向用户提供界面.负责根据提供的模型数据,生成准备提供给用户的格式界面. 支持多种视图引擎(Razor和ASPX视图引擎是官 ...
- NET MVC 升级到5.1后,View视图中代码报错
使用nuget将项目中MVC4 升级到MVC5,之后项目还可以正常编译运行, 但View视图中相关的很多代码都报错,比如: 1.@model找不到 2.@Html找不到,本该是System.Web.M ...
- Django框架 之 view视图
Django框架 之 view视图 浏览目录 概述 简单的视图 HttpRequest对象 CBV和FBV 给视图加装饰器 Request对象 Response对象 JsonResponse对象 Dj ...
- DNS主从服务,子域授权,view视图,日志系统,压力测试
DNS主从服务,子域授权,view视图,日志系统,压力测试 DNS性能测试工具queryperfDNS查询过程: DNS主从建立: 环境: 主服务器:10.140.165.93 从服务器:10.140 ...
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(四)Alert View视图 学习笔记
当我们的应用电量不足的时候,就需要警告提示,那么我们可以用Alert View视图 实现:
- view视图文件中的input等输入框必须含有name属性,不然控制器里的动作formCollection是没有值的
view视图文件中的input等输入框必须含有name属性,不然控制器里的动作formCollection是没有值的,就是没有name属性,后台获取不到值
- MVC(Model(模型) View(视图) Controller(控制器))
复习 1. 商品表 增删改查 index.php add.php view.php edit.php action.php 2. MVC(Model(模型) Vie ...
- ThinkPHP框架视图详细介绍 View 视图--模板(九)
原文:ThinkPHP框架视图详细介绍 View 视图--模板(九) 视图也是ThinkPHP使用的核心部分: 一.模板的使用 a.规则 模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和 ...
随机推荐
- Django--Form组件使用出现的小bug记录--username拿到None
form过滤代码: class LoginForm(forms.Form): username = forms.CharField(max_length=20,min_length=3,label=' ...
- vue用echarts 画3d地球 且画线
页面效果如下: 项目结构如下: 引入的包 "dependencies": { "core-js": "^3.3.2", "regi ...
- 洛谷 题解 P1133 【教主的花园】
$n<=10^5 $ O(n)算法 状态 dp[i][j][k]表示在第i个位置,种j*10的高度的树,且这棵树是否比相邻两棵树高 转移 dp[i][1][0]=max(dp[i-1][2][1 ...
- nginx passwd (http://www.voidcn.com/article/p-suebfyqy-nx.html)
操作系统CentOS 7.2 nignx 1.10.1 首先我们用Nginx提供HTTP的Basic Auth功能,配置了需要输入的用户名和密码,才能访问网站. 我们使用htpasswd来生成密码信息 ...
- 记:linux服务器启动重启WEB项目启动成功,长时间卡住未响应
问题 云服务器部署web项目,每次正常启动项目后访问页面很久才能有响应,一直卡在INFO: Deploying web application directory ......长达几分钟以上,极度影响 ...
- HBase的简单介绍,寻址过程,读写过程
HBase是列族数据库,主要由,表,行键,列族,列标识,值,时间戳 组成, 表 其中HBase 主要底层存储依赖与hdfs,可以在HDFS中看到每个表名都作为一个独立的目录结构 ...
- (模板)求逆矩阵luoguP4783
题目链接:https://www.luogu.org/problem/P4783 题意:求矩阵的逆. 思路:高斯消元法求矩阵的逆,n为400,卡常,我是开了O2优化才AC的.. AC代码: #incl ...
- vue中页面跳转拦截器的实现方法
首先对index.js的router进行配置; export default new Router({ routes: [ { path: '/consultancy', name: 'consult ...
- #【Python】【demo实验34】【练习实例】【设置文本的颜色】
原题: 文本颜色设置. 我的代码 #!/usr/bin/python # encoding=utf-8 # -*- coding: UTF-8 -*- # 文本颜色设置. class bcolors: ...
- 1、spring mvc jsp页面中文乱码
jsp 页面头部 的page标签中加个 contentType="text/html;charset=utf-8"