1、前言
上篇文章,我们初步认识了DjangoRestFramework的安装和使用,已经具备快速开发Restful风格的接口了。但是在实际的生产过程中,我们通常需要根据业务需求对不同的接口进行权限的校验。
今天我们就来入门DjangoRestFramework的接口鉴权。
2、快速开始
2.1、在视图中使用permission_classes控制
第一种方式,我们可以直接在视图类(函数)中指定permission_classes对当前接口进行访问控制。
常用的控制类型:
- IsAuthenticated
- IsAdminUser
- 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将会是你不二的选择。