DjangoRestFramework的Api如何鉴权-djangorestframework-auth

1、前言

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

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

2、快速开始

2.1、在视图中使用permission_classes控制

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

常用的控制类型:

  1. IsAuthenticated
  2. IsAdminUser
  3. IsAuthenticatedOrReadOnly

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

app0/views.py

...
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的认证路由

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/接口的路由

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

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将会是你不二的选择。

版权声明:除特殊说明,博客文章均为phyger原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。来自:https://u1s1.vip/archives/109
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇