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. poj 3422 最小费用流

    如果不是从费用流区做这个题几乎不会想到用费用流 点有权值很容易想到拆点 问题是求最大sum ...  把权值取负 这样最小费用流的相反数就是最大sum 源点S汇点T k为移动次数 矩阵中的点拆成入点出 ...

  2. direction: rtl;

    这个属性,有点无语,费了点时间. <style type="text/css"> .hao {direction: rtl;}</style> <se ...

  3. zrange 复杂度 O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数

    redis 的 zrange 效率 - 简书 https://www.jianshu.com/p/40a66ff92768 ZRANGE key start stop [WITHSCORES] — R ...

  4. STM32 STOP模式唤醒后的时钟

    进了STOP模式后,PLL停掉了,所以,如果开始的时钟配置,用的是PLL,那么唤醒后,需要重新配置RCC. 如果使用的是PLL,及时是用MSI作为时钟源,放大出来的,比如4M的MSI,PLL放大到48 ...

  5. Python extend()方法--list

    描述 extend()方法:在列表末尾追加可迭代对象中的元素. 语法 语法格式:list.extend(iterable) 参数 iterable:可迭代的对象,这里的对象可以是字符串.列表.元组.字 ...

  6. Logstash安装介绍

    前言 logstash是ELK日志系统中的一部分,主要承担将收集完成日志进行过滤,并且输出到es的职责. logstash本身也可以作为客户端部署到应用系统的服务器上进行日志收集,但是由于资源开销占用 ...

  7. 如何查看正在执行sql的语句及其父语句调用?如何查看正在执行SQL的具体参数值与执行计划?

    ---SQL Server查询正在执行的SQL语句及执行计划 select ds.session_id,dr.start_time,db_name(dr.database_id),dr.blockin ...

  8. python基础-->流程控制-->分支结构-->单项分支-->双向分支

    # ###流程控制 ''' 流程:代码执行过程 流程控制:对代码执行过程的管控 顺序结构:代码默认从上到下依次执行 分支结构:对代码执行过程的管控 循环机构: while for ..in.... 分 ...

  9. [svc]简单理解什么是rpc调用?跟restapi有何区别?

    什么是rpc调用 restapi调用方式是对数据的crud. 常见的我们写flash写个api,或者借助django drf写个标准的resetapi,一个url可以借助httpget post pu ...

  10. Oracle SQL Loader

    C:/Documents and Settings/WWJD>sqlldr SQL :: Copyright (c) , , Oracle. All rights reserved. 用法: S ...