Home > database >  Pass a variable to another function and render an html template at the same time in django
Pass a variable to another function and render an html template at the same time in django

Time:12-07

We want to access the same variable in every function inside our views.py. Since it is not constant, we cannot use it as a global variable.

Is it possible to pass a variable to another function while also rendering an HTML template? What are the alternatives if none exist?

This is our login function in views.py

def loginpage(request):
    errorMessage = ''
   
    # Applicant Login
    if request.method=="POST": 
        if request.POST.get('username') and request.POST.get('pwd'):
            try:
                currentUser=Applicant.objects.get(username=request.POST['username'],pwd=request.POST['pwd'])
                currentUser=Applicant.objects.get(username=request.POST['username'])
                first = currentUser.firstname
                middle = currentUser.middleinitial
                last = currentUser.lastname
                AppDashboard = ApplicantDashboardPageView(currentUser, request)

            except Applicant.DoesNotExist as e:
                errorMessage = 'Invalid username/password!'

return render(request, 'home.html')

The currentUser variable inside our login function is the variable we want to pass in this function

def ApplicantdashboardPageView(currentUser, request):
    appPeriod = ApplicationPeriod.objects.all()
    exam = ExaminationSchedule.objects.all()
    posts = Post.objects.all().order_by('-created_on')
    form = PostForm()
    name=userNaCurrent
    print('from storeCurrentUser', name)

    if request.method == "GET":
        try:
            posts = Post.objects.all().order_by('-created_on')
            form = PostForm()
            #applicantID=currentUser.id  
            #applicantNotification = Applicant.objects.get(id=applicantID)
            return render(request, 'applicantdashboard.html', context={'UserName' : name,  'posts':posts,  'appPeriod':appPeriod, 'exam':exam})
        except ObjectDoesNotExist:
            return render(request, 'applicantdashboard.html', context={'UserName' : name,  'posts':posts,})
        
    return render(request, 'applicantdashboard.html', context={'UserName' : name,  'posts':posts,  'appPeriod':appPeriod, 'exam':exam})

I am new to Django so please bear with me if my question seem too basic. Thank you

CodePudding user response:

Store raw user password is a very big flaw in security. Please read more about Django Authentication system https://docs.djangoproject.com/en/4.1/topics/auth/

Basically, to store critical confidential information like passwords you need to at least, encrypt it. But for passwords you don't need to see the raw value of it, isn't it? Therefore, you just need to hash it and compare it every time you need to authenticate the user. Read more here Best way to store password in database

Django Auth system will also help to solve the issue by injecting the current user into a "global" request object so that you can access it everywhere.

CodePudding user response:

You can do the same by keeping those 2 methods in a class and accessing variables by creating objects for it.

Please reply to this message if it doesn't work for you.

  • Related