1

I created class based view to access uid and token . Here I create one web page which have one button of activate user.

I wish to activate user that created. I am receiving the activation link via email. When I click on the link an activation page is opened. this page has a button to activate user. On click the button a post request is executed to activate user but I am getting 404 error.

Activate_User_App/views.py

import json
from common_strings import ACTIVATION_BASE_ROUTE
from django.views import View
from django.shortcuts import render
from django.http import HttpResponse
import requests      
 
class ActivationView(View):
    def get (self, request, uid, token):
        print('get called in activate')
        return render(request, 'activate.html')

    def post (self, request, uid, token):
        print('UID : ', uid)
        print('Token : ', token)
        payload = json.dumps({'uid': uid, 'token': token})
        print("payload : " , payload)
        protocol = 'https://' if request.is_secure() else 'http://'
        web_url = protocol + request.get_host() + '/'
        post_url = web_url + ACTIVATION_BASE_ROUTE
        print('post_url : ' + post_url)
        response = requests.post(post_url, data = payload)
        print("response : ", response)
        return HttpResponse(response.text)

Activate_User_App/urls.py:

    urlpatterns = [re_path(r'^(?P<uid>[\w-]+)/(?P<token>[\w-]+)/$',ActivationView.as_view()),]

settings.py

 DJOSER = {
    'PASSWORD_RESET_CONFIRM_URL': AUTHENTICATION_BASE_ROUTE + 'password/reset/confirm/{uid}/{token}',
    'USERNAME_RESET_CONFIRM_URL': AUTHENTICATION_BASE_ROUTE + 'username/reset/confirm/{uid}/{token}',
    'ACTIVATION_URL': ACTIVATION_BASE_ROUTE + '{uid}/{token}/',
    'SEND_ACTIVATION_EMAIL': True,
    'SEND_CONFIRMATION_EMAIL': True,
    'PASSWORD_CHANGED_EMAIL_CONFIRMATION': True,
    'USERNAME_CHANGED_EMAIL_CONFIRMATION': True,
    'USER_CREATE_PASSWORD_RETYPE': True, #Designed to propote good programming practice
    'SET_PASSWORD_RETYPE': True, #Designed to propote good programming practice
    'PASSWORD_RESET_CONFIRM_RETYPE': True, #Designed to propote good programming practice
    'LOGOUT_ON_PASSWORD_CHANGE' : True, #Note : Logout only works with token based authentication. djoser 2.10
    'PASSWORD_RESET_SHOW_EMAIL_NOT_FOUND': False, #Please note that setting this to True will expose information whether an email is registered in the system
    'USERNAME_RESET_SHOW_EMAIL_NOT_FOUND': False, #Please note that setting this to True will expose information whether an email is registered in the system
    'HIDE_USERS': True,
    'token': 'djoser.serializers.TokenSerializer',
    'token_create': 'djoser.serializers.TokenCreateSerializer',
    'LOGIN_FIELD': 'email', #Default: User.USERNAME_FIELD where User is the model set with Django’s setting AUTH_USER_MODEL.
     'SERIALIZERS': {
         'user': 'user_profile.serializer.UserSerializer',
     },

project/urls.py

       urlpatterns = [ 
       path(ACTIVATION_BASE_ROUTE, include('Activate_User_App.urls')),
       re_path(r'^api/authentication/', include('djoser.urls')),
       re_path(r'^api/authentication/', include('djoser.urls.authtoken')),

common_strings

AUTHENTICATION_BASE_ROUTE = 'authentication/user/'
ACTIVATION_BASE_ROUTE = AUTHENTICATION_BASE_ROUTE + 'activate/'

activate.html

    <form action="" method="post">
    {% csrf_token %}
    <td ><button type="submit">Click Here For Activate Account</button></td>
    </form>

0 Answers0