https://www.django-rest-framework.org/  官方站

https://www.django-rest-framework.org/tutorial/quickstart/#serializers    -- 序列化

一个 例子

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/(\d+)/', views.BookHandle.as_view()),
url(r'books/', views.BookHandle.as_view()),
]
class BookHandle(APIView):
# 获取所有书籍
def get(self, request,id=None):
if id:
books_obj_list = models.Book.objects.filter(id=id)
else:
books_obj_list = models.Book.objects.all() book_se = BookSerializer(books_obj_list, many=True) # 要点
return Response(book_se.data)

查询全部和带参数的查询 --

from django.shortcuts import render
from app01 import models
from rest_framework.views import APIView
from rest_framework import serializers
from rest_framework.response import Response # 响应 class BookSerializer(serializers.ModelSerializer):
class Meta:
model = models.Book
fields = '__all__' # exclude = ('user',) 排除某些字段的方法 fields=['','']列表
     class BookHandle(APIView):
# 获取所有书籍
def get(self, request,id=None):
if id:
books_obj_list = models.Book.objects.filter(nid=id)
else:
books_obj_list = models.Book.objects.all() book_se = BookSerializer(books_obj_list, many=True) # 要点
return Response(book_se.data) def post(self, request):
cs = BookSerializer(data=request.data,many=False)
if cs.is_valid():
cs.save() # create 新建
return Response(cs.data)
else:
return Response(cs.errors) class SBookHandle(APIView):
# 更新数据
def put(self,request,id):
old_obj = models.Book.objects.filter(pk=id).first() # querySet
cs = BookSerializer(data=request.data,many=False,instance=old_obj)
if cs.is_valid():
cs.save() # 更新 update
return Response(cs.data)
else:
return Response(cs.errors) def delete(self,request,id):
models.Book.objects.filter(pk=id).delete() # 删除
return Response('') def get(self,request,id):
books_obj_list = models.Book.objects.get(pk=id) # model 类型
book_se = BookSerializer(books_obj_list,many=False)
return Response(book_se.data)
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.BookHandle.as_view()), # 不带参数的 url(r'books/(\d+)/', views.SBookHandle.as_view()), # 带参数的
]
 -- views.py --
# 进阶版
from rest_framework.mixins import CreateModelMixin,UpdateModelMixin,DestroyModelMixin,ListModelMixin,RetrieveModelMixin
from rest_framework import generics class PublishHandle(ListModelMixin,CreateModelMixin,generics.GenericAPIView):
queryset = models.Publish.objects.all()
serializer_class = PublishSerializer
def get(self, request): return self.list(request) def post(self, request):
return self.create(request) class SPublishHandle(UpdateModelMixin,DestroyModelMixin,RetrieveModelMixin, generics.GenericAPIView):
queryset = models.Publish.objects.all()
serializer_class = PublishSerializer
def put(self, request,*args,**kwargs):
return self.update(request,*args,**kwargs) # update def delete(self, request,*args,**kwargs):
return self.destroy(request,*args,**kwargs) # destroy def get(self, request,*args,**kwargs):
return self.retrieve(request,*args,**kwargs) # retrieve # 极简版
# class AuthorHandle(generics.ListCreateAPIView): # 查询创建二合一
# queryset = models.Author.objects.all()
# serializer_class = AuthorSerializer
# #
# class SAuthorHandle(generics.RetrieveUpdateDestroyAPIView): # 查单 更新 删除 三合一
# queryset = models.Author.objects.all()
# serializer_class = AuthorSerializer #终极版
from rest_framework.viewsets import ModelViewSet
class SAuthorHandle(ModelViewSet): # 全合一
queryset = models.Author.objects.all()
serializer_class = AuthorSerializer -- all_serializer.py --
from app01 import models
from rest_framework import serializers
from rest_framework.response import Response # 响应
from rest_framework.views import APIView class BookSerializer(serializers.ModelSerializer): # create update
class Meta:
model = models.Book
fields = '__all__' class PublishSerializer(serializers.ModelSerializer):
class Meta:
model = models.Publish
fields = '__all__' class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = models.Author
fields = '__all__' -- urls.py --
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.BookHandle.as_view()), # 不带参数的
url(r'books/(\d+)/', views.SBookHandle.as_view()), # 带参数的 url(r'publishs/$', views.PublishHandle.as_view()), # 不带参数的
url(r'publishs/(?P<pk>\d+)/', views.SPublishHandle.as_view()), # 不带参数的 url(r'authors/$', views.SAuthorHandle.as_view({'get':'list','post':'create'})), # 不带参数的
url(r'authors/(?P<pk>\d+)/', views.SAuthorHandle.as_view({'get':'retrieve','put':'update','delete':'destroy'})), # 不带参数的
]

drf 多表的更多相关文章

  1. drf 单表

    ^_^ # [{title,price},{}] 构造的数据结构 简单的FBV/CBV def showbooks(request): # FBV if request.method =='GET': ...

  2. DRF单表序列化和反序列化

    安装 djangorestframework pip install djangorestframework 将rest_framework注册到app上 INSTALLED_APPS = [ 're ...

  3. drf Serializer使用

    drf序列化 在前后端不分离的项目中,可以使用Django自带的forms组件进行数据验证,也可以使用Django自带的序列化组件对模型表数据进行序列化. 那么在前后端分离的项目中,drf也提供了数据 ...

  4. DRF框架(三)——media资源路径设置、多表设计复习及补充、序列化组件(ModelSerializer)操作多表(序列化与反序列化)、多表序列化与反序列化整合(重点)

    media资源路径设置  (设置好后把图片放在这个文件夹中,通过链接能访问到图片) 1.先在根目录设置一个media文件夹 2.配置settings.py,加上下面的 MEDIA_URL = '/me ...

  5. drf三大认证:认证组件-权限组件-权限六表-自定义认证组件的使用

    三大认证工作原理简介 认证.权限.频率 源码分析: from rest_framework.views import APIView 源码分析入口: 内部的三大认证方法封装: 三大组件的原理分析: 权 ...

  6. DRF的orm多表关系补充及serializer子序列化

    目录 一.控制多表关系的字段属性 1.如何建立基表 2.断开连表关系 3.四种级联关系 二.子序列化 一.控制多表关系的字段属性 1.如何建立基表 要在基表中配置Meta,设置abstract=Tru ...

  7. Drf 序列化 ModelSerializer跨表取数据

    1.对于OneToOne.Foreignkey.choices字段可以使用source取出相关信息: class CourseSerializer(serializers.ModelSerialize ...

  8. drf相关问题

    drf自定义用户认证: 登录默认 使用django的ModelBackend,对用户名和密码进行验证.但我们平时登录网站时除了用户名也可以用邮箱或手机进行登录,这就需要我们自己扩展backend 一. ...

  9. DRF 商城项目 - 用户( 登录, 注册,登出,个人中心 ) 逻辑梳理

    用户登录 自定义用户登录字段处理 用户的登录时通过 手机号也可以进行登录 需要重写登录验证逻辑 from django.contrib.auth.backends import ModelBacken ...

随机推荐

  1. mobile_轮播图_style_left 版本

    mobile 轮播图 小圆点逻辑(排他) 1. 统一给所有 span 元素加 class=""; 2. 切换到谁,谁的 class="active"; 移动端轮 ...

  2. Go语言基础之time包

    Go语言基础之time包 时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法. Go语言中导入包 Go语言中使用import关键字导入包,包的名字使用双引号(”)包裹 ...

  3. Hadoop-2.9.2单机版安装(伪分布式模式)(一)

    一.环境 硬件:虚拟机VMware.win7 操作系统:Centos-7 64位 主机名: hadoopServerOne 安装用户:root软件:jdk1.8.0_181.Hadoop-2.9.2 ...

  4. 测试自动化学习3-python3简单操作

    1.列表操作 增 stu = []stus.append('lili') #在list的末尾增加一个元素 stus.insert(9,'yjk') #在指定的位置插入元素, 查 print('单个取, ...

  5. Django集成Bootstrap美化后台

    1.pip install bootstrap-admin 2.编辑项目下的settings.py,增加下面行,放在最前面 3.编辑项目下的settings.py,增加下面行

  6. 2019年5款你必须知道的顶级ASO优化工具

    仅仅几年前,品牌一直在挣扎着进入顶级榜单的时候.但随着时代的变迁,以及技术承担着市场的每一个噱头,一切都发生了变化,包括市场的传播,消费者行为和品牌影响.今天,品牌不仅仅局限于广告和促销,而且品牌的影 ...

  7. 设计、定义并实现Complex类

    设计.定义并实现Complex类 #include <iostream> #include <cmath> using namespace std; class MyCompl ...

  8. @ResponseBody ResponseEntity

    1.产生疑问 我们知道,如果在 Controller 的某个方法上加上 @ResponseBody 注解,那么你就能拿到 json 数据. 如果你只是知道这么用,那么你应该知道 ResponseBod ...

  9. springboot新增swagger2配置

    转自http://www.cnblogs.com/jtlgb/p/8532433.html SpringBoot整合Swagger2 相信各位在公司写API文档数量应该不少,当然如果你还处在自己一个人 ...

  10. Jenkins+Jmeter持续集成笔记(五:问题优化)

    通过前面的一系列文章,我的API自动化测试平台已经搭建成型,但是要投入具体项目使用时,还有以下几个问题需要优化. 还是接着以上一篇笔记中的“test_token”项目为例: 1.邮件通知问题 (1)问 ...