- Python Microservices Development
- Tarek Ziadé
- 399字
- 2021-07-02 18:54:22
Templates
Sending back JSON or YAML documents is easy enough, since we're just serializing data. And most microservices produce machine-parseable data. But in some cases, we might need to create documents with some layout--whether it's an HTML page, or a PDF report, or an email.
For anything that's text-based, Flask integrates a template engine called Jinja (http://jinja.pocoo.org). The main reason Flask incorporates Jinja is to produce HTML documents, so you will find helpers like render_template, which generate responses by picking a Jinja template, and provide the output given some data.
But Jinja is not unique to HTML or other tag-based documents. It can create any document as long as it's text-based.
For example, if your microservice sends emails, instead of relying on the standard library's email package to produce the email content, which can be cumbersome, you could use Jinja.
The following is an example of an email template:
Date: {{date}}
From: {{from}}
Subject: {{subject}}
To: {{to}}
Content-Type: text/plain
Hello {{name}},
We have received your payment!
Below is the list of items we will deliver for lunch:
{% for item in items %}- {{item['name']}} ({{item['price']}} Euros)
{% endfor %}
Thank you for your business!
--
Tarek's Burger
Jinja uses double brackets for marking variables that will be replaced by a value. Variables can be anything that's passed to Jinja at execution time.
You can also use Python's if and for blocks directly in your templates with the {% for x in y % }... {% endfor %} and {% if x %}...{% endif %} notations.
The following is a Python script that uses the email template to produce an entirely valid RFC 822 message, which you can send via SMTP:
from datetime import datetime
from jinja2 import Template
from email.utils import format_datetime
def render_email(**data):
with open('email_template.eml') as f:
template = Template(f.read())
return template.render(**data)
data = {'date': format_datetime(datetime.now()),
'to': 'bob@example.com',
'from': 'tarek@ziade.org',
'subject': "Your Tarek's Burger order",
'name': 'Bob',
'items': [{'name': 'Cheeseburger', 'price': 4.5},
{'name': 'Fries', 'price': 2.},
{'name': 'Root Beer', 'price': 3.}]}
print(render_email(**data))
The render_email function uses the Template class to generate the email using the provided data.
- Boost程序庫完全開發指南:深入C++”準”標準庫(第5版)
- Learning NServiceBus(Second Edition)
- Mastering Zabbix(Second Edition)
- Android和PHP開發最佳實踐(第2版)
- 小創客玩轉圖形化編程
- MySQL 8從入門到精通(視頻教學版)
- Practical Windows Forensics
- 正則表達式經典實例(第2版)
- Nginx Lua開發實戰
- CoffeeScript Application Development Cookbook
- SQL Server 2008 R2數據庫技術及應用(第3版)
- Instant jQuery Boilerplate for Plugins
- Learning VMware vSphere
- PhoneGap 4 Mobile Application Development Cookbook
- INSTANT Apache Hive Essentials How-to