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. 【ASP.NET】Validation 服务器控件

    Validation 服务器控件 Validation 服务器控件用于验证输入控件的数据.如果数据未通过验证,则向用户显示错误消息. 创建 Validation 服务器控件的语法是: <asp: ...

  2. 源码包安装php7.2

    含有的命令:yum,wget,tar,./configure,make,cp,ln,source,php -v ==安装== [root@ycj ~]# yum -y install libxml2 ...

  3. eclipse maven工程打包失败

    报错如下: Maven install失败 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:comp ...

  4. CQL语句

    CQL中默认忽略大小写,若需要大小写敏感,可使用双引号将对象包起来,引用的时候也要用双引号包住 tips: 使用CQL需要预装Python环境 Ⅰ.基本知识点 1.1 数据类型 这边和关系型数据库相近 ...

  5. Building gRPC Client iOS Swift Note Taking App

    gRPC is an universal remote procedure call framework developed by Google that has been gaining inter ...

  6. Jmeter设置默认中文页面

    方法一(从网上看到的) 启动Jmeter找到 options >choose language >chinese(简体繁体自己选). 这样设置后界面就变成了中文,但是当我们下次打开时又恢复 ...

  7. git 远程

    git remote add origin [远程仓库地址]

  8. JS正则练习集

    基础练习: //连续3个数字 var pattern1 = /\d{3}/g; console.log(pattern1.test('s23')); // false console.log(patt ...

  9. IDEA使用技巧

    1,导入原Eclipse Web项目 由于使用 PowerDesign连接MySql时只能用32位 Jdk,原Eclipse项目依赖于64位Jdk,导致在eclipse打不开工程,把工程导入IDEA后 ...

  10. 浅析对spring中IOC的理解

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...