首页 > 其他分享 >drf之路由类与认证类

drf之路由类与认证类

时间:2022-10-08 15:55:23浏览次数:45  
标签:models 认证 --- book 登入 login 路由 drf


一、自动生成路由

对于我们的视图类只要继承了ViewSetMixin及其子类 那么路由的写法就需要改变

path('books/', views.BookView.as_view({'get': 'list'}))

这个时候有人写了两个路由类 能够自动生成路由,这样我们就可以不用再自己写映射关系了
# 自动生成路由
from rest_framework.routers import SimpleRouter, DefaultRouter

# 1.实例化路由对象
router = SimpleRouter()
# 2.注册路由
router.register('books', views.BookView, 'books')

urlpatterns = []

# 3.添加路由
urlpatterns += router.urls

# 这个时候就会自动产生路由了

# DefaultRouter和SimpleRouter区别:
    DefaultRouter的用法和SimpleRouter的用法是一样的 就是DefaultRouter 会多出一个路径 就是根路径

# 添加路由还有一种添加方式
# 实例化路由对象
router = SimpleRouter()
# 注册路由
router.register('books', views.BookView, 'books')

urlpatterns = [
    path('', include(router.urls)),  # 添加路由 这样也是可以的
]

1 总结

# 我们在写自动产生路由的时候 其实映射关系已经定死了

book/---》get ---》list
book/---》post---》create
book/1 ---》get---》retrieve
book/1---》put----》update
book/1---》delete---》destroy
# 请求方式与类中的方法其实已经定好了 

# 我们在写视图类的时候类中必须有一下方法
    -list,create,retrieve,update,destroy方法之一
    -就是五个试图扩展类之一+GenericAPIView  九个子类也可以,还有ModelViewSet

2 action装饰器的使用

# 现在我们自动生成路由的时候 想在视图类中写其他方法名字该怎么自动产生路由呢?

class BookView(ModelViewSet):
    queryset = Book
    serializer_class = BookSerializer
    
    def login(self, request):
        pass
# 该怎么让路由匹配成功之后 执行login方法呢?

# 我们可以使用action装饰器
class BookView(ModelViewSet):
    queryset = Book
    serializer_class = BookSerializer

    @action(methods=['get'], detail=False, url_path='login', url_name='login')
    def login(self, request):
        pass
# 这样写了之后 那么以后get请求都会执行该login方法

action参数解析

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

# methods
    支持的请求方式,因为是列表,所以可以写多个

# detail
    默认是False, 控制路由是生成 book/login 还是 book/pk/login  False就生成book/login

# url_path
    控制book/后面的名字是什么 不写就是按照方法名

# url_name
    起别名, 作用于反向解析

登入接口编写

# 我们先创建一个用户表先
class User(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=32)

# 我们现在要想一想如何判断用户是否登入了?
    
'''
按照之前我们可以有session表可以记录登入用户的随机字符串,
但是我们现在前后端分离了 前端可以是浏览器、小程序、手机页面那么这个时候session就不能帮我们存储了 所以我们需要也需要一个东西帮我们来验证用户是否登入
我们可以在用户登入的时候 返回一个随机字符串 然后之后用户再登入的时候只需要携带这个字符串即可判断用户是否登入 所以我们还需要创建一个存储随机字符串的表 然后与用户表做一对一关系
'''   
# 随机字符串表
class UserToken(models.Model):
    user = models.OneToOneField(to='User', on_delete=models.CASCADE)
    token = models.CharField(max_length=32)  # 其实这个存储随机字符串的字段也可以存储到用户表中 只不过这样分开扩展性

 

标签:models,认证,---,book,登入,login,路由,drf
From: https://www.cnblogs.com/stephenwzh/p/16769179.html

相关文章

  • 路由组件
    路由组件自动生成路由action装饰器的使用路由Routers对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮......
  • Vue2路由
    路由前端路由:不同的网址对应各自的页面vue的前端路由:SPA应用要做出路由效果,就得判断当前网址,然后切换组件vue-router就是专门做切换组件的功能,它是一个单独的技术,......
  • 【Vue2】一文弄懂前端路由
    一、对路由的理解1.什么是路由路由其实就是一组键值对or映射关系,在一个路由中应包含最基本的路径和组件信息。示例如下:上面展示的是一个路由组,即用"[]"将一组路由写在一......
  • drf_1~5
    前后端开发模式1.前后端不分离----全栈涉及模板语法2.前后端分离2.1前端测试工具:模仿发送http请求--postman2.2api接口:连接前后端的媒介restful规范1.使用https......
  • 第一节 身份认证的基本流程
    前言    先感谢涛哥写了这么好的文章​    学习完孤傲苍狼和涛哥的博客,觉得分享知识是一种进步,原因很简单:能把别人教会了的博客,一定是好博客。我始终相信,写......
  • react路由
    -react路由其实是借助BOM中的History对象实现的,专门有一个history.js的库,可以让操作history对象简单起来。用history.js可以通过两种方式创建路由对象:1、History.create......
  • drf05-2个视图基类-5个扩展类-9个视图子类-视图集
    1.2两个视图基类#之前写了五个接口,继承APIView#还可以继承GenericApiView:它帮了我们干很多事#GeneriaAPIView.属性和方法-属性 -queryset#要序列化的数据 -seri......
  • drf视图基类,视图扩展类和视图子类
    两个视图基类GenericAPIView属性: queryset#要序列化的数据 serializer_class#序列化类#了解lookup_field#通过get_object......
  • 分布式存储系统之Ceph集群CephX认证和授权
    前文我们了解了Ceph集群存储池操作相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16743611.html;今天我们来聊一聊在ceph上认证和授权的相关话题;我们......
  • drf学习-5
    drf视图继承关系表2个视图基类之前写5个接口,继承了APIview还可以继承GenericAPIView,它帮我们干了好多事GenericAPIView:属性和方法属性  掌握项  -queryset......