前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DjangoRestFramework的Api如何鉴权

DjangoRestFramework的Api如何鉴权

作者头像
Python研究所
发布2022-06-27 14:52:28
1.7K0
发布2022-06-27 14:52:28
举报
文章被收录于专栏:大飞的部落阁

1、前言

上篇文章,我们初步认识了DjangoRestFramework的安装和使用,已经具备快速开发Restful风格的接口了。但是在实际的生产过程中,我们通常需要根据业务需求对不同的接口进行权限的校验。

今天我们就来入门DjangoRestFramework的接口鉴权。

2、快速开始

2.1、在视图中使用permission_classes控制

第一种方式,我们可以直接在视图类(函数)中指定permission_classes对当前接口进行访问控制。

常用的控制类型:

  1. IsAuthenticated
  2. IsAdminUser
  3. IsAuthenticatedOrReadOnly

我们这里使用IsAuthenticated作为演示,这个权限标识经过认证的用户都有权限访问。

app0/views.py

代码语言:javascript
复制
...
from rest_framework import permissions
from rest_framework.response import Response
from rest_framework.views import APIView
​
class MyView(APIView):
    permission_classes = [permissions.IsAuthenticated]
    def get(self, request, *args, **kwargs):
        print(request)
        return Response("Get information successfully!")

如上,需要鉴权的视图类(函数)继承了APIView,类似上节的PersonViewSet集成了ModelViewSet一样,我们使用DjangoRestFramework都是集成了它已有的功能;我们在视图类中指定了permission_classes=IsAuthenticated,代表当前接口需要经过认证才能访问。

dj0/urls.py

增加rest_framework的认证路由

代码语言:javascript
复制
from django.contrib import admin
from django.urls import path,include
from app0 import views
​
urlpatterns = [
    path('admin/', admin.site.urls),
    path('app0/', include('app0.urls')),
    path('',views.hi),
    path('api-auth/', include('rest_framework.urls'))  # add
    ]

app0/urls.py

增加app0/info/接口的路由

代码语言:javascript
复制
from django.urls import path
​
from . import views
from rest_framework.routers import DefaultRouter
​
router = DefaultRouter()  # 可以处理视图的路由器
router.register('person', views.PersonViewSet)  # 向路由器中注册视图集
​
app_name='app0'
urlpatterns = [
    path('', views.v1,name='app0index'),
    path('hi', views.hi,name='hi'),
    path('info/', views.MyView.as_view()), ## add
]
urlpatterns += router.urls

默认的DjangoRestFramework是使用了DjangoAdmin的用户权限的。

我们直接访问(未登录):http://localhost:8989/app0/info/

我们点击右上角login使用admin用户登录后:

我们可以清楚的看到,认证后已经可以拿到接口的正常响应了。

以上,我们仅对app0/info/接口进行的权限控制,其他接口都是放开的。

访问:http://localhost:8989/app0/person/

从右上角的login我们可以确定这个接口是不用登陆也能访问的,即开放的。

2.2、全局配置

当我们想要对全局的接口都进行认证控制时,我们对每个接口都进行配置,显然不够合理。此时我们只需要对应用进行全局配置即可。

接口中的permission_classes就不需要了。

dj0/settings.py

代码语言:javascript
复制
STATIC_URL = '/static/'
# 以下为新增
REST_FRAMEWORK = {
 'DEFAULT_PERMISSION_CLASSES': (
  'rest_framework.permissions.IsAuthenticated',
 )
}

以上配置就可以实现全局的接口访问控制,即所有接口都需要认证后才能进行访问。

再次访问:http://localhost:8989/app0/person/

登录后再次访问:http://localhost:8989/app0/person/

3、最后

以上就是使用DjangoRestFramework进行接口权限校验的入门知识,如果你想快速的开发出一个具备CRUD和权限认证功能的后端服务,那么DjangoRestFramework将会是你不二的选择。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、前言
  • 2、快速开始
    • 2.1、在视图中使用permission_classes控制
      • 2.2、全局配置
      • 3、最后
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档