Передача переменной в другую функцию и одновременный рендеринг html-шаблона в django

Мы хотим обращаться к одной и той же переменной в каждой функции внутри нашего файла views.py. Поскольку она не является постоянной, мы не можем использовать ее как глобальную переменную.

Возможно ли передать переменную в другую функцию, одновременно отрисовывая HTML-шаблон? Каковы альтернативы, если их нет?

Это наша функция входа в систему в файле 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')

Переменная currentUser внутри нашей функции login является переменной, которую мы хотим передать в эту функцию

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})

Я новичок в Django, поэтому, пожалуйста, потерпите меня, если мой вопрос покажется слишком простым. Спасибо

Хранение необработанного пароля пользователя - это очень большой недостаток в безопасности. Пожалуйста, прочитайте больше о системе аутентификации Django https://docs.djangoproject.com/en/4.1/topics/auth/

В принципе, для хранения такой важной конфиденциальной информации, как пароли, необходимо, как минимум, зашифровать ее. Но для паролей вам не нужно видеть их необработанное значение, не так ли? Поэтому вам просто нужно хэшировать его и сравнивать каждый раз, когда вам нужно аутентифицировать пользователя. Подробнее читайте здесь Лучший способ хранения пароля в базе данных

Система Django Auth также поможет решить эту проблему, инжектируя текущего пользователя в "глобальный" объект запроса, так что вы сможете обращаться к нему везде.

Вы можете сделать то же самое, сохранив эти 2 метода в классе и получив доступ к переменным, создав для них объекты.

Пожалуйста, ответьте на это сообщение, если оно не работает для вас.

Вернуться на верх