Djoser 用户激活电子邮件 POST 示例

Djoser user activation email POST example

我正在使用 Django rest 框架和 Djoser 进行身份验证和用户注册。

当新用户注册时,Djoser 会发送一封激活电子邮件,其中包含 link 执行 GET 请求。为了激活,我需要从激活中提取 uid 和令牌 URL 并发出 POST 请求让 Djoser 能够激活用户。

我的环境是Python3和Django 1.11,Djoser 1.0.1。

我想做的是在Django中处理get请求,提取uid和token,然后发出POST请求。我已经提取了 uid 和 token 并想创建一个 POST (在此 GET 请求中)。 我不知道如何在后台发出这个 POST 请求。

我的URL是这样的:

http://127.0.0.1:8000/auth/users/activate/MQ/4qu-584cc6772dd62a3757ee

当我在电子邮件中单击它时,它会发出 GET 请求。

我在 Django 视图中处理这个问题。

视图需要像这样发出 POST 请求:

http://127.0.0.1:8000/auth/users/activate/

data= [(‘uid’=‘MQ’), (‘token’=‘4qu-584cc6772dd62a3757ee’),]

我对处理 GET 的看法是:

from rest_framework.views import APIView
from rest_framework.response import Response
import os.path, urllib


class UserActivationView(APIView):
    
    def get (self, request):
        urlpathrelative=request.get_full_path()
        ABSOLUTE_ROOT= request.build_absolute_uri('/')[:-1].strip("/")

        spliturl=os.path.split(urlpathrelative)
        relpath=os.path.split(spliturl[0])
        uid=spliturl[0]
        uid=os.path.split(uid)[1]
        
        token=spliturl[1]
        postpath=ABSOLUTE_ROOT+relpath[0]+'/'
        post_data = [('uid', uid), ('token', token),]     
        result = urllib.request.urlopen(postpath, urllib.parse.urlencode(post_data).encode("utf-8"))
        content = result.read()
        return Response(content)

views.py

from rest_framework.views import APIView
from rest_framework.response import Response
import requests

class UserActivationView(APIView):
    def get (self, request, uid, token):
        protocol = 'https://' if request.is_secure() else 'http://'
        web_url = protocol + request.get_host()
        post_url = web_url + "/auth/users/activate/"
        post_data = {'uid': uid, 'token': token}
        result = requests.post(post_url, data = post_data)
        content = result.text
        return Response(content)

urls.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^auth/users/activate/(?P<uid>[\w-]+)/(?P<token>[\w-]+)/$', UserActivationView.as_view()),
]