ModelViewSet基础讲解(纯干货)

ModelViewSet是封装度最高的DRF的视图类。包含了怎删改查中的所有接口操作。

它继承自GenericViewSet、ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin。

!!!!!注意,因为继承关系,必须在内部定义属性,queryset和serializer_class,因此,ModelViewSet通常结合ModelSerializer使用

所以,在使用ModelViewSet定义API时,我们只需要套用模板即可

使用视图集,可以将一系列逻辑相关的动作放到一个类中:

  • list() 提供一组数据
  • retrieve() 提供单个数据
  • create() 创建数据
  • update() 更新数据
  • destory() 删除数据

视图集类不再实现get()、post()、put()、delete()方法,而是实现动作 action。 如 list()、retrieve()、create()、update()、destory()

请求url对应方法备注
get127.0.0.1:8000/app01/book/listListModelMixin
get127.0.0.1:8000/app01/book/{1}/retrieve…Mixin
post127.0.0.1:8000/app01/book/create…Mixin
put127.0.0.1:8000/app01/book/{1}/update…Mixin
detete127.0.0.1:8000/app01/book/{1}/destroy…Mixin
get127.0.0.1:8000/app01/book/ user_actionuseraction自定义
post127.0.0.1:8000/app01/book/ user_actionuseraction自定义
#views中
class BookInfoViewSet(ModelViewSet):
    """增删改查图书信息"""

    # 指定查询集
    queryset = BookInfo.objects.all()
    # 指定序列化器
    serializer_class = BookInfoModelSerializer

定义好了API视图后,需要在路由中,将请求方法与action进行绑定

from django.conf.urls import url
from django.urls import path,include
from . import views
#导入路由控制类
from rest_framework.routers import SimpleRouter,DefaultRouter

#实例化路由控制对象
router = DefaultRouter()
#注册
router.register(r'book',views.BookInfoViewSet)

#编写路由,固定写法,不清楚是否还有其他写法
urlpatterns = [
    url(r'',include(router.urls)),
]

action(自定义方法)

DRF框架提供的action根本不能满足某些奇葩需求,这时候,就需要自定义action

只需要在ModelViewSet定义的api类中,自定action函数后,再将自定义的函数在路由中绑定即可

def 函数名(self, request):
        '''
        自定义action
        return: JSON数据
        '''
        pass
#示例:
def latest(self, request):
    '''获取最后一条记录'''

    # 获取模型数据
    book = BookInfo.objects.latest('id')
    # 获取序列化器对象
    s = BookInfoModelSerializer(instance=book)
    return Response(s.data)
#路由
urlpatterns = [
    url(r'^books/$', views.BookInfoViewSet.as_view({'get':'action函数名'})),
    #示例:
url(r'^books/$', views.BookInfoViewSet.as_view({'get':'latest'})),

]

之后,使用http://127.0.0.1:8000/app01/books/进行测试

或者使用装饰器方法:

from rest_framework.decorators import action

@action(methods=['get'],detail=False,url_path='bookw')
def use(self,request):

    return Response({'name':'天听'})
'''
http://127.0.0.1:8000/app01/book/bookw/
如果不加url_path,路由就成了http://127.0.0.1:8000/app01/book/use/
'''

注意,此写法不需要再注册路由,需要在装饰器内部进行定义
url_path
如果不定义url_path,路由默认为函数名

detail=False表示不需要匹配主键的正则,函数不需要传入主键就设为False

  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,很高兴为您解答这个问题。 在深度学习中,数据增强是一种常用的技术,它可以通过对原始数据进行变换、裁剪、旋转、翻转等操作,来扩充训练集,从而提高模型的泛化能力和鲁棒性。在图像领域,常用的数据增强方法包括随机裁剪、随机旋转、随机翻转、色域变换等。下面,我将为您介绍如何使用 Python 对图像进行随机数据增强。 1. 随机裁剪 随机裁剪是一种简单而有效的数据增强方法,它可以通过对原始图像进行随机裁剪,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机裁剪。 ```python from PIL import Image import random def random_crop(img, crop_size): w, h = img.size left = random.randint(0, w - crop_size) top = random.randint(0, h - crop_size) right = left + crop_size bottom = top + crop_size return img.crop((left, top, right, bottom)) ``` 2. 随机旋转 随机旋转是一种常用的数据增强方法,它可以通过对原始图像进行随机旋转,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机旋转。 ```python from PIL import Image import random def random_rotate(img, angle_range): angle = random.uniform(-angle_range, angle_range) return img.rotate(angle) ``` 3. 随机翻转 随机翻转是一种简单而有效的数据增强方法,它可以通过对原始图像进行随机翻转,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机翻转。 ```python from PIL import Image import random def random_flip(img, flip_prob): if random.random() < flip_prob: return img.transpose(Image.FLIP_LEFT_RIGHT) return img ``` 4. 色域变换 色域变换是一种常用的数据增强方法,它可以通过对原始图像进行色彩变换,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现色域变换。 ```python from PIL import Image import random def random_color(img, color_range): r, g, b = img.split() r = r.point(lambda i: i + random.randint(-color_range, color_range)) g = g.point(lambda i: i + random.randint(-color_range, color_range)) b = b.point(lambda i: i + random.randint(-color_range, color_range)) return Image.merge('RGB', (r, g, b)) ``` 以上就是使用 Python 进行随机数据增强的一些常用方法,希望对您有所帮助。如果您有任何问题,请随时联系我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值