【发布时间】:2021-09-28 15:50:21
【问题描述】:
我使用 django 构建了一个 API,并在使用 Sendinblue 创建一个用户时自动发送欢迎电子邮件。这一步我没有问题。 (所以我们的网址是/add_user/)
我有第二个网址可以向用户发送链接(uid + 令牌)(感谢他的电子邮件)。为此,我使用了一个外部包:djoser。所以我使用了djoser/auth/users/reset_password/和/auth/users/reset_password_confirm/的url
我的梦想是将/reset_password/ 和/add_user/ 结合在一个网址中/add_user/
我的问题是 /reset_password/ 和 /reset_password_confirm/ 中的逻辑是由 djoser 编写的,所以我无法处理。或者我不知道怎么做!
这是我试图覆盖 djoser 视图的内容:
在 urls.py 中:
path('custom_djoser/', ChangeCredentialsView.as_view(), name='customdjoser'),
在views.py中:
class ChangeCredentialsView(UserViewSet):
def post(self, *args, **kwargs):
print("hello world")
return JsonResponse({"helloworld":"success"})
出现以下错误:
在调用 .as_view() 时必须提供 actions 参数 视图集。例如 .as_view({'get': 'list'})
所以我删除了 urls.py 中的 .as_view() 并得到了这个错误:
禁止(CSRF 令牌丢失或不正确。):/custom_djoser/
对我来说它是不可理解的,因为我不使用 csrf 令牌,但我尝试在我的类中的调度函数中使用 @csrf_exempt。我试图用授权令牌将class ChangeCredentialsView(UserViewSet, APIView): 定义为我的另一个类。无事可做,每次使用 csrf 令牌出错。
我可能会探索一种非常痛苦和愚蠢的方法来做我想做的事情,请告诉我是否有更简单的方法来做到这一点!
【问题讨论】:
-
不可能将
reset_password和reset_password_confirm合并到一个视图中,因为中间有一个中间步骤,需要用户在前端重置密码。最多,您可以在add_user视图中实现reset_password功能,并让前端应用程序将数据发布到reset_password_confirm路由。要将reset_password功能添加到您的add_user视图中,请参阅here。 -
感谢您的帮助,是的,您是对的,我编辑了我的帖子,因为我只想结合 reset_password 和 add_user
-
好的,你的
add_user视图和序列化器是什么样的?因为您需要添加的只是在创建用户后从 djoser 的存储库向视图/序列化器发送电子邮件代码。 -
我给你看了答案,因为对评论来说太大了
标签: python django djoser sendinblue