Django基于Token的验证是一种常用的认证方式,它可以完美地支持RESTful API的认证,以及Web页面的认证,也具有较好的安全性。下面将介绍Django基于Token的验证的实现步骤。
1. 安装Django Rest Framework
首先需要在Django项目中安装Django Rest Framework,它是Django中一个流行的RESTful框架,提供了一种简单的方式来实现基于Token的认证。
安装DRF的命令如下:
pip install djangorestframework
2. 配置Django Rest Framework
在Django项目的settings.py中需要配置REST_FRAMEWORK的相关参数,其中包括认证方式和Token的过期时间等。示例代码如下:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_THROTTLE_RATES': {
'user': '100/day',
'anon': '10/day'
},
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
],
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
],
'DEFAULT_METADATA_CLASS':
'rest_framework.metadata.SimpleMetadata',
'DEFAULT_VERSIONING_CLASS':
'rest_framework.versioning.URLPathVersioning',
'DEFAULT_FILTER_BACKENDS': [
'django_filters.rest_framework.DjangoFilterBackend'
],
'DEFAULT_PAGINATION_CLASS':
'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,
'DEFAULT_THROTTLE_CLASSES': [
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle'
],
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
'DEFAULT_CONTENT_NEGOTIATION_CLASS': 'rest_framework.negotiation.DefaultContentNegotiation',
'EXCEPTION_HANDLER': 'core.exceptions.custom_exception_handler',
'COERCE_DECIMAL_TO_STRING': False,
'DATETIME_FORMAT': '%Y-%m-%d %H:%M:%S',
'DATETIME_INPUT_FORMATS': [
'%Y-%m-%d %H:%M:%S',
'%Y-%m-%d %H:%M',
'%Y-%m-%d',
'%Y%m%dT%H%M%S%fz'
],
'UNICODE_JSON': False,
}
在这里,我们设置了TokenAuthentication作为默认的认证方式,同时设置了IsAuthenticated权限,表示只有已认证用户才能访问。
3. 创建Token
在Django Rest Framework中,可以通过Django自带的Token模型来生成和管理Token。示例代码如下:
from rest_framework.authtoken.models import Token
from django.contrib.auth.models import User
# 获取或创建Token
user = User.objects.get(username='user1')
token, created = Token.objects.get_or_create(user=user)
4. Token的验证
在Django Rest Framework中,可以通过TokenAuthentication认证方式来实现Token的验证。示例代码如下:
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import api_view, permission_classes, authentication_classes
@api_view(['GET'])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def test_api(request):
return Response({'msg': 'Hello, World!'})
在这里,我们定义了一个测试API,添加了TokenAuthentication和IsAuthenticated权限,表示只有已认证用户才能访问该API。
以上就是Django基于Token的验证的实现攻略,下面给出两个示例说明:
示例1:注册并获取Token
from rest_framework.authtoken.models import Token
from django.contrib.auth.models import User
# 注册用户
user = User.objects.create_user(username='testuser', password='testpass')
user.save()
# 获取Token
token = Token.objects.get(user=user)
print(f'Token: {token.key}')
示例2:使用Token访问API
import requests
# 使用Token访问API
url = 'http://example.com/api/test/'
headers = {'Authorization': f'Token {token}'}
response = requests.get(url, headers=headers)
print(response.json())
以上两个示例分别演示了如何注册并获取Token,以及如何使用Token访问API。在实际开发中,可以根据需求自行调整。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django基于Token的验证使用的实现 - Python技术站