2

我用 django 构建了一个 API,并在使用 Sendinblue 创建一个用户时自动发送欢迎电子邮件。这一步我没有问题。(所以我们在 url /add_user/

我有第二个 url 向用户发送链接(uid + 令牌)(感谢他的电子邮件)。为此,我使用了一个外部包:djoser。所以我使用 djoser 的 url/auth/users/reset_password//auth/users/reset_password_confirm/

我的梦想是在单个 url中组合/reset_password/和 我的问题是其中的逻辑是由 djoser 编写的,所以我无法处理它。或者我不知道怎么做!/add_user//add_user//reset_password//reset_password_confirm/


这是我试图覆盖 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"})

收到以下错误:

在 ViewSet 上调用 .as_view() 时必须提供 actions 参数。例如 .as_view({'get': 'list'})

所以我删除了 urls.py 中的 .as_view() 并得到了这个错误:

禁止(CSRF 令牌丢失或不正确。):/custom_djoser/

对我来说,这是不可理解的,因为我不使用 csrf 令牌,但我尝试在我的类中的调度函数中使用 @csrf_exempt。我试图class ChangeCredentialsView(UserViewSet, APIView):用授权令牌定义为我的另一个类。无事可做,每次使用 csrf 令牌出错。我可能会探索一种非常痛苦和愚蠢的方法来做我想做的事情,请告诉我是否有更简单的方法来做到这一点!

4

1 回答 1

0

@Scratch'N'Purr 由于评论空间不足,我在这里回答您:

目前我的add_user观点看起来像这样(最重要的部分,因为它很大)

class AddUserView(generics.CreateAPIView, APIView):
    def post(self, request):
               newUser = User(
                username    = request.POST.get('username'),
                password    = request.POST.get('password'),
                email       = request.POST.get('email'),
                image       = request.FILES['image'],
                full_name   = request.POST.get('full_name'),
                user_type   = request.POST.get('usertype'),
                contact_number = request.POST.get('phone')
            )
            newUser.save()
 
      **** then lines of code to send email with Sendinblue ****

通常我使用 request.data 来获取请求正文,但这里有一个文件,所以我不得不使用 formdata。我不得不承认我对序列化程序了解不多,也不使用它

于 2021-07-22T10:58:04.320 回答