drf 多表
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 多表的更多相关文章
- drf 单表
^_^ # [{title,price},{}] 构造的数据结构 简单的FBV/CBV def showbooks(request): # FBV if request.method =='GET': ...
- DRF单表序列化和反序列化
安装 djangorestframework pip install djangorestframework 将rest_framework注册到app上 INSTALLED_APPS = [ 're ...
- drf Serializer使用
drf序列化 在前后端不分离的项目中,可以使用Django自带的forms组件进行数据验证,也可以使用Django自带的序列化组件对模型表数据进行序列化. 那么在前后端分离的项目中,drf也提供了数据 ...
- DRF框架(三)——media资源路径设置、多表设计复习及补充、序列化组件(ModelSerializer)操作多表(序列化与反序列化)、多表序列化与反序列化整合(重点)
media资源路径设置 (设置好后把图片放在这个文件夹中,通过链接能访问到图片) 1.先在根目录设置一个media文件夹 2.配置settings.py,加上下面的 MEDIA_URL = '/me ...
- drf三大认证:认证组件-权限组件-权限六表-自定义认证组件的使用
三大认证工作原理简介 认证.权限.频率 源码分析: from rest_framework.views import APIView 源码分析入口: 内部的三大认证方法封装: 三大组件的原理分析: 权 ...
- DRF的orm多表关系补充及serializer子序列化
目录 一.控制多表关系的字段属性 1.如何建立基表 2.断开连表关系 3.四种级联关系 二.子序列化 一.控制多表关系的字段属性 1.如何建立基表 要在基表中配置Meta,设置abstract=Tru ...
- Drf 序列化 ModelSerializer跨表取数据
1.对于OneToOne.Foreignkey.choices字段可以使用source取出相关信息: class CourseSerializer(serializers.ModelSerialize ...
- drf相关问题
drf自定义用户认证: 登录默认 使用django的ModelBackend,对用户名和密码进行验证.但我们平时登录网站时除了用户名也可以用邮箱或手机进行登录,这就需要我们自己扩展backend 一. ...
- DRF 商城项目 - 用户( 登录, 注册,登出,个人中心 ) 逻辑梳理
用户登录 自定义用户登录字段处理 用户的登录时通过 手机号也可以进行登录 需要重写登录验证逻辑 from django.contrib.auth.backends import ModelBacken ...
随机推荐
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- [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, ...
- laravel之构造器操作数据库
使用构造器来查询的优点是可以方式sql注入 1.插入 2.修改数据库 3.删除 4.查询
- 什么是 js 变量提升 (Javascript Hoisting)
Javascript是一门容易遭人误解的语言,但是它的强大毋庸置疑.个人觉得,要想深入理解Javascript语言,首先必须对其基本的概念(例如:Scope,Closure,Hoisting等)要真正 ...
- 表单/iframe与video标签
<form action="所有表单值提交的地址" method="传值的方式默认是GET方式,还有另一种POST方式"> 表单元素</for ...
- python递归
一.递归 (1)递归就是函数自己调用自己的过程: (2)使用递归时,需要注意递归的出口,明确递归的终止条件. #计算n的阶乘 def fun(n): if n==1: return 1 else: r ...
- ThinkPHP5 添加多个文字水印及疑难解答
public function imageload() { $imgpath = ROOT_PATH . 'public' . DS . 'static' . DS . 'www' . DS . 'i ...
- Linux服务器tomcat无法通过ip加端口访问
Linux服务器tomcat无法通过ip加端口访问 防火墙开放端口 # Firewall configuration written by system-config-firewall# Manual ...
- vue 实现子向父传值
父组件 <template> <div id="app"> <child @onChange='onChildValue'></child ...
- Web开发——jQuery进阶
参考: 参考:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html 参考:Asynchronous J ...