drf--自动生成路由+action装饰器+补充(级联删除+uuid+模型类对象update_or_create方法)

10.8内容整理和概述

今日内容概要

内容目录

  • 自动生成路由
  • action装饰器
  • 战略补充

自动生成路由

应用背景:继承视图集(ViewSetMixin相关)的视图类需要在路由内做方法映射,为了简化,drf提供另一种路由生成方式———自动生成路由

功能:
	1.自动做方法映射
		默认映射方式:
			1.1 get-->list/retrieve
			1.2 post-->create
			1.3 put-->update
			1.4 delete-->destory

步骤:		# 所有步骤均在urls.py文件中
	1.导包:from rest_framework.routers import SimpleRouter, DefaultRouter
	2.实例化对象		# 例子:router = SimpleRouter()
		参数:
			1.trailing_slash:自动生成的路由结尾是否追加'/',默认追加
	3.注册路由		# 可以注册多个
		参数:
			1.prefix:路径
			2.viewset:路由对应的视图类
			3.basename:别名,默认为prefix对应参数
		例子:router.register('user',views.UserView,'user')
	4.将路由添加到urlpatterns参数中
		两种方式:
			1.在urlpatterns加上路由		# 例子:urlpatterns+=router.urls
			2.include做路由分发		# 例子:path('', include(router.urls))

'-------路由类差别-------'
SimpleRouter路由类和DefaultRouter路由类的差别:
	1.DefaultRouter能多提供一个根路径的路由
	2.根路径的路由访问的页面会显示已注册的视图类和相关路由信息

action装饰器

应用背景:当我们想把视图类自己定义的方法(五大方法除外),也能通过自动生成路由,做方法映射时,需要action装饰器来辅助方法映射

 action装饰器参数:
	1.methods:被装饰的方法映射的请求方式,参数类型为列表
	2.detail:控制是否带校验值(如pk)
		2.1 当detail=True时,路径模型:/user/pk/login
		2.2 当detail=False时,路径模型:/user/login
	3.url_path:定义当前视图类对应的路径后再增加的路径数据,形成一个新的路由		# 默认以方法名命名
	4.url_name:别名,用于反向解析

例子:
	class UserView(ViewSet):
		@action(methods=['GET','POST'], detail=True, url_path='login')	# 可响应路径(例子):/user/1/login
		def login(self, request,pk):
			方法体

战略补充(级联删除+uuid)

字段的级联删除:
	on_delete属性:
		1.models.CASCADE:当被关联的表数据被删除时,该表对应的数据也删除
		2.models.SET_NULL:当被关联的表数据被删除时,该字段变为空
		3.models.SET_DEFAULT:当被关联的表数据被删除时,该字段变为默认值		# 需要在该字段添加default属性
		4.models.SET(函数内存地址):当被关联的表数据被删除时,执行函数

uuid随机字符串:
	导包:import uuid
	功能:生成永不重复的随机字符串		# 宏观上永不重复
	系列:
		1.uuid1(节点,时间戳)
		2.uuid3(namespace,name)
		3.uuid4()					# 好处:不用传参数
		4.uuid5(namespace,name)

模型类对象update_or_create方法:
	功能:通过传入的关键字形参来筛选依据,如果查到符合的数据,进行更新操作;没有查到,进行新增操作
	参数:
		1.defaults:更新或新增的数据,字典类型
	例子:UserToken.objects.update_or_create(defaults={'token': token}, user=user)
posted @ 2023-04-23 20:32  维生素Z  阅读(33)  评论(0)    收藏  举报