Django Template Not Rendering Dictionary
У меня есть два микросервиса. Один кодирует пользовательские данные и отправляет их другому, который декодирует их и отображает.
Декодированные данные находятся в формате словаря, но не могут быть отображены
Микросервис Один
Этот микросервис используется для кодирования пользовательских данных с помощью b64encode, после чего данные отправляются в другой сервис для декодирования и обработки
В HttpResponse от Микросервиса два видно, что данные были получены
def encode_token_data(user):
payload = {
'username': user.username,
'is_superuser': user.is_superuser
}
json_data = json.dumps(payload)
encoded_token = base64.urlsafe_b64encode(json_data.encode()).decode().rstrip("=")
return encoded_token
@api_view(['POST'])
def login_user(request):
username = request.data.get('username')
password = request.data.get('password')
# print(f"Received login request with username: {username}")
user = authenticate(request, username=username, password=password)
if user is not None:
# print(f"User authenticated: {username}")
auth_login(request, user)
encoded_token = encode_token_data(user)
# print(f"Token generated: {encoded_token}")
payload = {
'token': encoded_token
}
receive_token_url = 'http://shared_assets:8002/receive_token/'
# print(f"Sending token to: {receive_token_url}")
try:
response = requests.post(
receive_token_url,
data=json.dumps(payload),
headers={'Content-Type': 'application/json'}
)
print(f"Response from receive_token endpoint: Status code {response.status_code}, Response body {response.text}")
if response.status_code == 200:
return Response({
'status': 'success',
'message': 'Login successful! Redirecting to Dashboard...',
'token': encoded_token
}, status=status.HTTP_200_OK)
else:
return Response({
'status': 'error',
'message': f'Failed to send token to the other project. Status code: {response.status_code}. Message: {response.text}'
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
except requests.RequestException as e:
# print(f"Exception occurred while sending token: {e}")
return Response({
'status': 'error',
'message': f'An error occurred while sending the token: {e}'
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
# print("Invalid username or password.")
return Response({
'status': 'error',
'message': 'Invalid username or password.'
}, status=status.HTTP_401_UNAUTHORIZED)
Микросервис Два
Этот микросервис получает, декодирует, обрабатывает и выдает данные шаблону в виде словаря.
декодированные данные получены и декодированы, я вижу данные в пермине, но когда я пытаюсь вывести их в шаблон в браузере, данные почему-то исчезают во время транзита
# Helper function to decode token data
def decode_token(encoded_token):
try:
padded_token = encoded_token + '==' if len(encoded_token) % 4 != 0 else encoded_token
json_data = base64.urlsafe_b64decode(padded_token).decode()
data = json.loads(json_data)
return data
except (ValueError, json.JSONDecodeError) as e:
print(f"Decoding error: {e}")
return None
@api_view(['POST'])
def receive_token(request):
if request.content_type == 'application/json':
token = request.data.get('token')
else:
token = request.POST.get('token')
print('Received Token:', token)
if token:
user_info = decode_token(token)
print('Decoded data:', user_info) # Check the decoded data here
if user_info:
context = {'user_info': user_info}
return render(request, 'navbar.html', context) # Pass context directly
else:
return HttpResponse('Failed to decode token.', status=400)
return HttpResponse('No token provided.', status=400)
Микросервис два Шаблон
{% if user_info %}
<p style="color:red;">User: {{ user_info.username }}</p>
<p style="color:red;">Is Superuser: {{ user_info.is_superuser }}</p>
{% else %}
<p style="color:red;">No user information available.</p>
{% endif %}
{% if user_info.is_superuser %}
<a href="#" class="{% if current_section == 'clients' %}active{% endif %}">
<i class="fa fa-users"></i><span class="module-name">Clients</span>
</a>
{% endif %}