首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Djoser用户激活email POST示例

Djoser用户激活email POST示例
EN

Stack Overflow用户
提问于 2017-11-07 09:37:43
回答 1查看 6.1K关注 0票数 5

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

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

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

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

我的URL是这样的:

代码语言:javascript
复制
http://127.0.0.1:8000/auth/users/activate/MQ/4qu-584cc6772dd62a3757ee

当我在电子邮件中点击这个按钮时,它会发出一个GET请求。

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

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

代码语言:javascript
复制
http://127.0.0.1:8000/auth/users/activate/

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

我对GET的看法是:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-07 14:04:23

views.py

代码语言:javascript
复制
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

代码语言:javascript
复制
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^auth/users/activate/(?P<uid>[\w-]+)/(?P<token>[\w-]+)/$', UserActivationView.as_view()),
]
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47154404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档