sammydude
sammydude

Reputation: 135

Django - Python :: How to pass a variable to another page on Render/Redirect

I have a login page A, in which I take User/Pwd info, and post to another 3rd party website and get a sessionid variable in JSON format. When I redirect/render ingestion page B I need this sessionid variable to be displayed/available there.

This is what I've tried, but I can't seem to get it to work. Can someone help please?

urls.py

from django.urls import path
from loginp.views import LoginView
from loginp.views import IngestionView

urlpatterns = [
    path('login/', LoginView.as_view(),name='LoginView'),
    path('ingestion/', IngestionView.as_view(template_name='registration/ingestion.html'),name='IngestionView'),]

views.py

from django.views.generic import TemplateView
from django import forms
from django.shortcuts import render, redirect
from django.http import HttpResponse, HttpResponseRedirect
from .forms import LoginForm
from .forms import IngestionForm
import json
import requests

class LoginView(TemplateView):
template_name = 'registration/login.html'

def get(self, request):
    form = LoginForm()
    return render(request, self.template_name, {'form':form})

def post(self, request):
    form = LoginForm(request.POST)
    if form.is_valid():
        #print form.cleaned_data()
        text = form.cleaned_data['email']
        pwd = form.cleaned_data['password']

    data = {
     "@type": "login",
     "username": text,
     "password": pwd
    }


    data_json = json.dumps(data)
    headers = {'Content-type': 'application/json'}
    url='https://cloud.com/ma/api/v2/user/login'
    response = requests.post(url, data=data_json, headers=headers)
    sessionid=response.json()['icSessionId']

    form1 = IngestionForm()
    #return render(request,'registration/ingestion.html',{'sessionid':sessionid}) #{'info':args})
    #return HttpResponseRedirect(reverse('IngestionView', kwargs={'sessionid':sessionid}))
    return redirect(request,'registration/ingestion.html',sessionid=sessionid) 


class IngestionView(TemplateView):
template_name = 'registration/ingestion.html'


def post(self, request):
    form1 = IngestionForm(request.POST)

    args1 = {"form": form1}
    return render(request, self.template_name, args1)

login.html

<html>
<head>
<title>Login Page</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
</head>
<div class="container">
        <div class="login-form col-md-4 offset-md-4">
            <h4 class="title">Please Login</h4>
            <br>
            <form action="{% url 'IngestionView' %}" method="POST">
            <div class="form-group" >
              {% csrf_token %}  
              {{form.as_p}}     
              <br>
              <button class="btn btn-primary btn-block" type="submit" value='submit'>login</button>
             </div>
            </form>
        </div>
</div>
</body>
</html>

ingestion.html

<html>
<head>
<title>Ingestion Details</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
</head>
<div class="container">
            <h4 class="title">Ingestion Details</h4>
            <br>
            <form method="POST">    
            <div class="form-group" >
              {% csrf_token %}  
              {{ form.as_p }}       
              <br>
              <button class="btn btn-primary btn-block" type="submit" value='submit'>Do something</button>

             </div>
            </form>
        </div>
</div>
<h2>Session Id {{ sessionid }}</h2>
</body>
</html>

<-----New Code-----> views.py

data_json = json.dumps(data)
headers = {'Content-type': 'application/json'}
url='https://dm-us.informaticacloud.com/ma/api/v2/user/login'
response = requests.post(url, data=data_json, headers=headers)
sessionid=response.json()['icSessionId']
request.session['sessionid'] = sessionid
request.session.save()
form1 = IngestionForm()
return render(request,'registration/ingestion.html',{'sessionid':sessionid}) #{'info':args})

ingestion.html

<h2>Session Id {{ request.session.get('sessionid') }}</h2>

Upvotes: 0

Views: 1400

Answers (1)

neverwalkaloner
neverwalkaloner

Reputation: 47354

You can save this value to Django's session. In first view:

sessionid=response.json()['icSessionId']
request.session['sessionid'] = sessionid

In second view:

class IngestionView(TemplateView):
    template_name = 'registration/ingestion.html'


    def post(self, request):
        form1 = IngestionForm(request.POST)
        sessionid=request.session['sessionid']
        args1 = {"form": form1, 'sessionid': sessionid}
        return render(request, self.template_name, args1)

Upvotes: 2

Related Questions