📅  最后修改于: 2023-12-03 15:00:26.791000             🧑  作者: Mango
在Django UTC-1项目中, JET是一款非常强大的后台管理工具,可以帮助开发者快速创建管理后台,同时还提供了令牌身份验证功能,可以实现用户身份的验证,保障数据的安全。
令牌身份验证是基于Token的一种身份认证机制,了解令牌身份验证的作用可以更好地理解JET的使用。
在传统的基于session的认证机制中,服务端需要维护session状态,每个请求都需要从数据库中查询session来确保用户的合法性,这种认证方式会造成过多的数据库查询和服务器压力。
而基于Token的身份认证机制不需要维护session状态,每个请求只需要在请求头中携带Token,服务器通过Token验证用户的身份,而Token的验证是基于密钥签名的,从而可以避免直接查询数据库从而提高了服务端的性能和安全性。
JET提供了令牌身份验证的功能,下面介绍如何在Django UTC-1项目中使用JET的令牌身份验证。
首先安装JET,使用pip命令安装即可。
pip install django-jet
在settings.py
中添加JET的设置。
INSTALLED_APPS = [
# ...
'jet',
'jet.dashboard',
]
JET_DEFAULT_THEME = 'default'
JET_INDEX_DASHBOARD = 'app.dashboard.CustomIndexDashboard'
JET_APP_INDEX_DASHBOARD = 'jet.dashboard.dashboard.DefaultAppIndexDashboard'
JET_SIDE_MENU_CUSTOM_APPS = [
('app', [
{'label': 'Model1', 'url': '/admin/app/model1/'},
{'label': 'Model2', 'url': '/admin/app/model2/'},
]),
]
JET_SIDE_MENU_COMPACT = True
其中,INSTALLED_APPS
中添加了jet
和jet.dashboard
,JET_DEFAULT_THEME
设置了默认的主题样式,JET_INDEX_DASHBOARD
和JET_APP_INDEX_DASHBOARD
设置了仪表板的默认路径,JET_SIDE_MENU_CUSTOM_APPS
设置了侧边菜单的内容,JET_SIDE_MENU_COMPACT
设置了侧边菜单的紧凑样式。
在settings.py
中添加JET令牌身份验证的设置。
INSTALLED_APPS = [
# ...
'rest_framework',
'corsheaders',
'rest_framework.authtoken',
'jet',
'jet.dashboard',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
CORS_ORIGIN_ALLOW_ALL = True
JWT_AUTH = {
'JWT_AUTH_HEADER_PREFIX': 'Token',
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_ALLOW_REFRESH': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
}
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'jet.dashboard.modules.auth.backends.CustomUserBackend',
)
其中,INSTALLED_APPS
中添加了rest_framework
和rest_framework.authtoken
,并设置了DEFAULT_AUTHENTICATION_CLASSES为TokenAuthentication,DEFAULT_PERMISSION_CLASSES为IsAuthenticated,JWT_AUTH_HEADER_PREFIX设置了Token的前缀,JWT_EXPIRATION_DELTA设置了Token的过期时间,JWT_ALLOW_REFRESH设置了是否允许刷新Token,JWT_REFRESH_EXPIRATION_DELTA设置了刷新Token的过期时间。
在Django UTC-1项目中创建一个hello接口用于测试JET令牌身份验证。
# views.py
from rest_framework.response import Response
@api_view(['GET'])
def hello(request):
user = request.user
if user.is_authenticated:
return Response(data={'message': 'Hello ' + user.username})
else:
return Response(data={'message': 'Hello Stranger'})
然后在路由中添加hello接口的路径。
# urls.py
from django.urls import path
from .views import hello
urlpatterns = [
path('hello/', hello),
]
在Postman中向hello接口发送请求,请求头中携带Token。
Authorization: Token <Token>
如果Token验证通过,服务器会返回Hello <username>
的响应,否则会返回Hello Stranger
的响应。