10.8内容整理和概述
今日内容概要
内容目录
自动生成路由
应用背景:继承视图集(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)