如何在Django中不创建用户模型和登录体系的情况下生成随机uid和token
无用户模型实现用户激活的操作方案
现有代码问题修正
- 首先修正视图请求发送逻辑:你当前代码中调用
request.post()是错误用法,request为Django传入的当前请求对象,不具备发送外部POST请求的能力,若需调用其他接口需安装并导入requests库,使用requests.post()发起请求。 - 路由冲突问题:你配置的自定义激活路由和Djoser自带的激活接口路径完全一致,会导致请求匹配混乱,建议修改自定义视图的路由前缀避免冲突。
随机uid、token生成逻辑
无需依赖用户模型即可生成符合格式要求的参数,示例代码如下:
import uuid import secrets # 生成符合URL规则的随机uid,格式适配Djoser要求 def generate_random_uid(): return str(uuid.uuid4()).replace("-", "")[:20] # 生成符合字符规则的随机激活token def generate_random_token(): return secrets.token_urlsafe(20)
调整后的完整实现代码
视图代码
如果你不需要实际校验用户是否存在,可直接在自定义视图返回激活成功,无需转发请求到Djoser接口:
from rest_framework.views import APIView from rest_framework.response import Response class ActivateUser(APIView): def get(self, request, uid, token, format = None): payload = {'uid': uid, 'token': token} print("payload : " , payload) # 无需用户校验时直接返回204激活成功状态 return Response({}, status=204)
路由配置
修改路由避免和Djoser默认路径冲突:
re_path('activate/(?P<uid>[\w-]+)/(?P<token>[\w-]+)/',ActivateUser.as_view())
settings.py配置
保持激活URL和路由匹配即可:
DJOSER = { 'ACTIVATION_URL': 'activate/{uid}/{token}/', # 不需要发送激活邮件可添加下面配置 # 'SEND_ACTIVATION_EMAIL': False }
内容的提问来源于stack exchange,提问作者Shweta Shinde
相关产品推荐
相关产品推荐

