Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2suQXL2.
Armin Ronacher shares his experiences building SaaS businesses on a Python technology stack from a security and scalability point of view, where Python shines and which technologies to pair it with for best experiences. Filmed at qconlondon.com.
Armin Ronacher is the creator of the Python Flask framework and frequent speaker at conferences about API and system design. He is currently working on Sentry, an Open Source Crash Reporting SaaS business.
2. InfoQ.com: News & Community Site
Watch the video with slide
synchronization on InfoQ.com!
https://www.infoq.com/presentations
/saas-python
• Over 1,000,000 software developers, architects and CTOs read the site world-
wide every month
• 250,000 senior developers subscribe to our weekly newsletter
• Published in 4 languages (English, Chinese, Japanese and Brazilian
Portuguese)
• Post content from our QCon conferences
• 2 dedicated podcast channels: The InfoQ Podcast, with a focus on
Architecture and The Engineering Culture Podcast, with a focus on building
• 96 deep dives on innovative topics packed as downloadable emags and
minibooks
• Over 40 new content items per week
3. Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
Presented at QCon London
www.qconlondon.com
4. Hi, I'm Armin
... and I do Open Source,
lots of Python and SaaS
Flask
Sentry
…
49. Log Security Related Actions
def log(action, message=None):
data = {
'action': action,
'timestamp': datetime.utcnow()
}
if message is not None:
data['message'] = message
if request:
data['ip'] = request.remote_addr
user = get_current_user()
if user is not None:
data['user'] = User
db.session.add(LogMessage(**data))
51. Language from User or Request
def get_current_language():
user = get_current_user()
if user is not None:
return user.language
if request and request.accept_languages:
return request.accept_languages[0]
return 'en_US'