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. 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D

    目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...

  2. [LeetCode] N-ary Tree Level Order Traversal N叉树层序遍历

    Given an n-ary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  3. laravel之构造器操作数据库

    使用构造器来查询的优点是可以方式sql注入 1.插入 2.修改数据库 3.删除 4.查询

  4. 什么是 js 变量提升 (Javascript Hoisting)

    Javascript是一门容易遭人误解的语言,但是它的强大毋庸置疑.个人觉得,要想深入理解Javascript语言,首先必须对其基本的概念(例如:Scope,Closure,Hoisting等)要真正 ...

  5. 表单/iframe与video标签

    <form action="所有表单值提交的地址" method="传值的方式默认是GET方式,还有另一种POST方式"> 表单元素</for ...

  6. python递归

    一.递归 (1)递归就是函数自己调用自己的过程: (2)使用递归时,需要注意递归的出口,明确递归的终止条件. #计算n的阶乘 def fun(n): if n==1: return 1 else: r ...

  7. ThinkPHP5 添加多个文字水印及疑难解答

    public function imageload() { $imgpath = ROOT_PATH . 'public' . DS . 'static' . DS . 'www' . DS . 'i ...

  8. Linux服务器tomcat无法通过ip加端口访问

    Linux服务器tomcat无法通过ip加端口访问 防火墙开放端口 # Firewall configuration written by system-config-firewall# Manual ...

  9. vue 实现子向父传值

    父组件 <template> <div id="app"> <child @onChange='onChildValue'></child ...

  10. Web开发——jQuery进阶

    参考: 参考:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html 参考:Asynchronous J ...