django-rest-framework - 用于 REST API 密码重置的 Django 表单
问题描述
我的情况:
Django 应用程序 + 移动应用程序,使用 Django REST api 和 rest-auth。我想实现密码重置交易,在移动应用程序上启动。
我遵循的工作流程是:
1)从手机执行密码重置请求-> OK,没问题
2) Django 向用户发送电子邮件 -> 好的,没问题
3) 转到电子邮件链接页面并创建新密码 -> 好的,没问题 但是创建新密码的表单是 REST framework API 表单
问题
1) 我可以自定义这个表格吗?我不知道该怎么做,因为这个 URL 是可变的(带有 UID 和令牌)。有什么建议么?
2) 此工作流程是否合适,或者是否有更好的方法来管理重置密码工作流程?
在我的 URL 文件中,我有:
urlpatterns = [
...
re_path(r'^password/reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
]
我应该在这里创建一个自定义视图吗?
在 Django REST 文档中,它说 REST 框架适用于返回 API 样式响应和常规 HTML 页面。但我找不到一个合适的例子来帮助我解决我的问题。
解决方案
找到解决方案对于那些可能有同样问题的人:
基本上我没有意识到在 allauth 中有一个密码重置工作流程,另一个是通过 rest_auth 重置密码的工作流程,在电子邮件上使用的链接令牌有一些差异
allauth 中的工作流程可以满足我的需要(来自 rest_auth 的工作流程需要使用可浏览的 api 表单),只需要从来自 rest_auth 请求的初始请求启动它,我在 views.py 中使用此代码解决了该请求:
from rest_framework import status
from rest_framework.decorators import api_view, authentication_classes,
permission_classes
from rest_framework.response import Response
from allauth.account.forms import ResetPasswordForm
@api_view(['POST'])
@authentication_classes([])
@permission_classes([])
def recover_password(request):
if request.data.get('email'):
form = ResetPasswordForm({'email': request.data.get('email')})
if form.is_valid():
form.save(request)
return Response('Email with instructions was sent to provided account',
status=status.HTTP_200_OK)
return Response('Missing email', status=status.HTTP_400_BAD_REQUEST)
该函数接收电子邮件并启动 allauth 工作流
推荐阅读
- r - 使用 ggplot 重新创建部分 lm() 图
- php - WordPress 中年存档的问题
- arrays - 带有 2 个匹配字符串的 Swift5 过滤器列表
- python - 如何从嵌套字典中提取值作为 Pandas DataFrames
- python - 使用 Paramiko 检索所有主机密钥(如 ssh-keyscan)
- flutter - 如何将任何 Dart 代码片段格式化为字符串输出
- python - VS Code 没有从 launch.json 中获取 args 列表
- c# - 如何通过 c# 将图像(条形码图像)传递给 rdlc 文件
- python-3.x - 我应该怎么做才能让新的小部件始终落后于 kivy 中的旧小部件?
- java - 如何在另一个线程上开始解析 Volley