• 一、基本路由(原始方式)
  • 二、半自动路由(视图继承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控制的更多相关文章

  1. rest-framework解析器,url控制,分页,响应器,渲染器,版本控制

    解析器 1.json解析器 发一个json格式的post请求.后台打印: request_data---> {'title': '北京折叠'} request.POST---> <Q ...

  2. Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)

    一.url控制 基本路由写法:最常用 from django.conf.urls import url from django.contrib import admin from app01 impo ...

  3. REST framework之URL控制

    REST framework之URL控制 一 自定义路由 1.1 原始方式 from django.conf.urls import url from app01 import views urlpa ...

  4. DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)

    url控制 第二种写法(只要继承了ViewSetMixin) url(r'^pub/$',views.Pub.as_view({'get':'list','post':'create'})), #获取 ...

  5. django中的url控制

    1.django中的第一个控件:url控制  (路由分发) urls.py:请求路径与视图函数的之间的关系 步骤: 1.首先是要配置环境,   2.其次就是引路径   3.在视图的文件夹里面写相应的函 ...

  6. web项目自定义路由_实现静态资源URL控制

    前言: IIS会默认把:图片.JS.HTML.CSS这些文件当成静态资源处理,为了减少服务器压力,默认这些静态资源是不走URL路由规则控制的. 作为小白及初学者,本人对这些了解甚少,补充基础知识吧: ...

  7. uniGUI试用笔记(十五)通过URL控制参数

    通过URL代入参数,在代码中读取,如: http://localhost:8501/?ServerPort=212&&ServerIP=192.168.31.12 在代码中可以通过: ...

  8. ci url 控制 查询 通过路由 控制返回 视图的结果

    http://192.168.2.102/fastdatav/ChkUrl/daily/G8 http://192.168.2.102/fastdatav/ChkUrl/daily/ 放在 试图  控 ...

  9. uniGUI之通过URL控制参数(25)

    通过URL代入参数,在代码中读取,如: http://localhost:8077/?ServerPort=212&&ServerIP=192.168.31.12 procedure ...

随机推荐

  1. .netcore 3.1高性能微服务架构:封装调用外部服务的接口方法--HttpClient客户端思路分析

    众所周知,微服务架构是由一众微服务组成,项目中调用其他微服务接口更是常见的操作.为了便于调用外部接口,我们的常用思路一般都是封装一个外部接口的客户端,使用时候直接调用相应的方法.webservice或 ...

  2. 解决Python3下map函数的显示问题

    今天小编就为大家分享一篇解决Python3下map函数的显示问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧map函数是Python里面比较重要的函数,设计灵感来自于函数式编程.P ...

  3. webApi前端ajax调用后端返回{"readyState":0,"status":0,"statusText":"error"}解决方案

    var url = data.url, params = data.params, try_times = data.try_times , async = data.sync == 'false' ...

  4. Spring中 @Autowired注解与J2EE@Resource注解的区别

    在开发中经常使用到@Autowired和@Resource进行装配. 不禁好奇这两个注解的差异在何处??? 相同点: @Resource的作用相当于@Autowired,均可标注在字段或属性的sett ...

  5. 在vue中使用elementUI饿了么框架使用el-calendar日历组件,实现自定义显示备忘录标注

    饿了么官网给的自定义例子是点击哪个日期在日期后面加个勾 而我们想要的是显示备忘录,像这样↓,日历上直接显示 这时候我们要把template里的代码改一下 <el-calendar> < ...

  6. python字符串前面加上'r'的作用

    在打开文件的时候open(r'c:\....') 加r和不加''r是有区别的 'r'是防止字符转义的 如果路径中出现'\t'的话 不加r的话\t就会被转义 而加了'r'之后'\t'就能保留原有的样子 ...

  7. MySQL int(1) 与 int(3) 的区别

    1.占用的字节都一样,只是容纳字符个数有区别. int(1): 一个字符. int(3): 三个字符. 2.另外要注意的是,无符号整数,自动左侧0填充宽度. int(3),插入值5,会变成005存储. ...

  8. HDU1408 - 盐水的故事

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1408 解题思路:主要考虑最后一滴可能不满足D毫升,但仍算1秒.另外还要注意浮点数的比较. #inclu ...

  9. 手写MyBatis流程

    MyBatis 手写MyBatis流程 架构流程图 封装数据 封装到Configuration中 1.封装全局配置文件,包含数据库连接信息和mappers信息 2.封装*mapper.xml映射文件 ...

  10. Cenos7下指定ftp用户限制在特定目录下(亲身实践)

    好了,废话不多说.上头下来个需求,让我给别人开个ftp账户,只能访问项目的目录,不能访问项目外的目录,就算cd切换目录也不行. 开始: 第一步;安装ftp,我用的是centos7,只需敲入命令 yum ...