rest_framework:url控制
- 一、基本路由(原始方式)
- 二、半自动路由(视图继承ModelViewSet)
- 三、自动路由(自动生成路由)
准备工作:
models中创建一张表,默认使用sqlite数据库,更新表
新增测试数据
加载rest_framework应用
方式一:
手动设置路由:
编辑视图:
1,加载模块
2、设置视图
设置路由:
创建一个文件:app01Serializer(名字自定义)
- # app01Serializer.py
- from rest_framework import serializers
- from app01 import models
- 调用表publish的所有字段
- class PublishSerializers(serializers.ModelSerializer):
- class Meta:
- # 调用所有数据
- model=models.Publish
- fields='__all__'
# 设置前端显示那些字段
# fields=('id','name')
# 前端不显示那些字段
# exclude=('id',)
# 当表有关联的时候可以添加深度
# depth =1
编辑视图:
写get获取数据和post数据方法
- # views.py
- from rest_framework.views import APIView
- from rest_framework.response import Response
- from app01 import models
- # 引用上个文件中的BookSerializer类
- from app01.app01Serializer import BookSerializer
- class Books(APIView):
- def get(self,request):
- books = models.Book.objects.all()
- # 当序列化一条数据的时候many=True可以不写,序列化多条数据的时候(也就是queryset对象)必须要写
- bookser=BookSerializer(books,many=True)
- print(type(bookser.data))
- return Response(bookser.data)
- def post(self,request):
- bookser=BookSerializer(data=request.data)
- if bookser.is_valid():
- bookser.save()
- return Response()
页面访问:
post数据:
注意:查询数据的时候只能查询所有数据,不能查询单个数据
想要可以查询单个数据需要重新定义路由,重新写对应的视图
单独对数据进行查询新增删除的借口:
- url(r'publish/(?P<pk>\d+)/$',views.PublishOnlyView.as_view()),
编辑视图:
- class PublishOnlyView(APIView):
- def get(self,request,pk):
- publish_list = models.Publish.objects.filter(pk=pk).first()
- ps=PublishSerializers(publish_list,many=False)
- return Response(ps.data)
- def post(self,request,pk):
publish_list = models.Publish.objects.filter(pk=pk).first()
ps = PublishSerializers(data=request.data,instance=publish_list)
if ps.is_valid():
ps.save()
return Response(ps.data)
else:
return Response(ps.errors)
def delete(self,request,pk):
models.Publish.objects.filter(pk=pk).delete()
return Response("")
第二种:mixin类和generice类编写视图
路由:
- url(r'^publish/$',views.PublishView.as_view()),
- url(r'publish/(?P<pk>\d+)/$',views.PublishDetailView.as_view()),
视图:
- from rest_framework.mixins import CreateModelMixin,RetrieveModelMixin,ListModelMixin,UpdateModelMixin,DestroyModelMixin
- from rest_framework.generics import GenericAPIView
- class PublishView(ListModelMixin,CreateModelMixin,GenericAPIView):
- queryset=models.Publish.objects.all()
- serializer_class=PublishSerializers
- def get(self, request):
- return self.list(request)
- def post(self, request):
- return self.create(request)
- class PublishDetailView(RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,GenericAPIView):
- queryset=models.Publish.objects.all()
- serializer_class=PublishSerializers
- def get(self,request,*args,**kwargs):
- return self.retrieve(request,*args,**kwargs)
- def put(self,request,*args,**kwargs):
- return self.update(request,*args,**kwargs)
- def delete(self,request,*args,**kwargs):
- return self.destroy(request,*args,**kwargs)
实现效果:
查询所有数据:可以新增数据,不需要通过json方式新增,可以通过输入框新增数据
单条数据:查询,修改,修改数据中会在输入框中显示原数据,删除数据
第三种:使用generics 下ListCreateAPIView,RetrieveUpdateDestroyAPIView
url:
- url(r'^publish/$',views.PublishView.as_view()),
- url(r'publish/(?P<pk>\d+)/$',views.PublishDetailView.as_view()),
视图:
- from rest_framework.generics import ListCreateAPIView,RetrieveUpdateDestroyAPIView
- class PublishView(ListCreateAPIView):
- queryset=models.Publish.objects.all()
- serializer_class=PublishSerializers
- class PublishDetailView(RetrieveUpdateDestroyAPIView):
- queryset=models.Publish.objects.all()
- serializer_class=PublishSerializers
四、使用ModelViewSet
url(根据需要添加功能):
- url(r'^publish/$', views.PublishView.as_view({'get': 'list', 'post': 'create'})),
- url(r'^publish/(?P<pk>\d+)/$',views.PublishView.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),
视图:
- from rest_framework.viewsets import ModelViewSet
- class PublishView(ModelViewSet):
# 获取所有数据- queryset=models.Publish.objects.all()
- serializer_class=PublishSerializers
rest_framework:url控制的更多相关文章
- rest-framework解析器,url控制,分页,响应器,渲染器,版本控制
解析器 1.json解析器 发一个json格式的post请求.后台打印: request_data---> {'title': '北京折叠'} request.POST---> <Q ...
- Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)
一.url控制 基本路由写法:最常用 from django.conf.urls import url from django.contrib import admin from app01 impo ...
- REST framework之URL控制
REST framework之URL控制 一 自定义路由 1.1 原始方式 from django.conf.urls import url from app01 import views urlpa ...
- DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)
url控制 第二种写法(只要继承了ViewSetMixin) url(r'^pub/$',views.Pub.as_view({'get':'list','post':'create'})), #获取 ...
- django中的url控制
1.django中的第一个控件:url控制 (路由分发) urls.py:请求路径与视图函数的之间的关系 步骤: 1.首先是要配置环境, 2.其次就是引路径 3.在视图的文件夹里面写相应的函 ...
- web项目自定义路由_实现静态资源URL控制
前言: IIS会默认把:图片.JS.HTML.CSS这些文件当成静态资源处理,为了减少服务器压力,默认这些静态资源是不走URL路由规则控制的. 作为小白及初学者,本人对这些了解甚少,补充基础知识吧: ...
- uniGUI试用笔记(十五)通过URL控制参数
通过URL代入参数,在代码中读取,如: http://localhost:8501/?ServerPort=212&&ServerIP=192.168.31.12 在代码中可以通过: ...
- ci url 控制 查询 通过路由 控制返回 视图的结果
http://192.168.2.102/fastdatav/ChkUrl/daily/G8 http://192.168.2.102/fastdatav/ChkUrl/daily/ 放在 试图 控 ...
- uniGUI之通过URL控制参数(25)
通过URL代入参数,在代码中读取,如: http://localhost:8077/?ServerPort=212&&ServerIP=192.168.31.12 procedure ...
随机推荐
- ES6中map数据结构
key值可以任意值或对象,value值可以是任意值或对象 let json={ name:'eternity', skill:'java' }; let map=new Map(); map.set( ...
- 清北学堂—2020.1提高储备营—Day 4 afternoon(动态规划初步(一))
qbxt Day 4 afternoon --2020.1.20 济南 主讲:顾霆枫 目录一览 1.动态规划初步 2.记忆化搜索 3.递推式动态规划 4.记忆话搜索与递推式动态规划的转化 5.状态转移 ...
- Unbuntu--安装VMware Tools
实现虚拟机Ubuntu窗口自适应,以及与本地主机粘贴复制 一.安装VMware Tools 1.首先在虚拟机点击安装VMware tools,会在个人home目录下生成VMwareTools-10.3 ...
- opencv —— boxFilter、blur、GaussianBlur、medianBlur、bilateralFilter 线性滤波(方框滤波、均值滤波、高斯滤波)与非线性滤波(中值滤波、双边滤波)
图像滤波,指在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像与处理中不可缺少的操作. 邻域算子,指利用给定像素及其周围的像素值,决定此像素的最终输出值的一种算子.线性邻域滤波器就是一种常 ...
- 【python基础语法】数字、布尔值(第1天课堂笔记)
# 导入模块 import keyword # print语句将内容输出到控制台 print("hello world!") # pep8编码规范 # 代码快速格式化快捷键:ctr ...
- JN_0016:查找端口占用
Windows查看端口占用 一. 查看所有进程占用的端口 在开始-运行-cmd,输入:netstat –ano 可以查看所有进程 二.查看占用指定端口的程序 当你在用tomcat发布程序时,经常会 ...
- Redis入门-01
目录 使用场景 支持的数据类型 主从复制 原理 配置 哨兵机制 持久化 RDB(Redis Database) AOF(Append Only File) redis(Remote DIctionar ...
- HDU1163 - Eddy's digital Roots
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1163 九余数:一个数除于9所得到的余数,即模9得到的值 求九余数: 求出一个数的各位数字之和,如果是两 ...
- 关于form表单提交数据后不跳转页面+ajax接收返回值的处理
1.前台的form表单建立,注意action.enctype的内容, 2.通过添加一个隐藏的iframe标签使form的target指向iframe来达到不跳转页面的效果,同时需要在js里获取ifra ...
- Spring-Cloud微服务踩坑
@feignclient和@requestmapping混用的时候出错 重写springmvc扫描controller时不带有@feignclient才实例化 @Configuration @Cond ...