pyramid lighter/faster/better web apps

Download Pyramid Lighter/Faster/Better web apps

If you can't read please download the document

Upload: dylan-jay

Post on 16-Apr-2017

12.649 views

Category:

Technology


0 download

TRANSCRIPT

Lighter/faster/better web apps

Dylan Jay

CTO PretaWeb.comSyPy.orgtwitter: djay75

From the mind of

Chris McDonoughAs seen in bearded of PyCon 2009 http://www.flickr.com/photos/termie/3392894269/

Pyramid Family Tree

Zope formally Principia(1996-)Zope2 (1998-)BlueBream formally Zope3(2004-)ZTK (2009-) Repoze.bfg (2008 2010)Pylons (2005-2010)Pylons Project (2010-)Pyramid formally repoze.bfg(Dec 2010 -)

TurboGears(2005-)

RoR(2004-)

Django(2005-)

Who uses it

It's still new

Karl Project

Aeterna Water paperless sales system

How to build complex web applications having fun

http://slidesha.re/mH9Lxa

1000 employees

No ORM = easy integrate with Plone

Less Magic. More simple

From the minds on PretaWeb...

PloneFactory

Web installer for the worlds favourite Python CMS

Coming 2011...

Differences...

Non opinionated framework

Component Architecture

Packages (eggs)

Simpler and faster

PyramidDjangoPlone

Not OpinionatedOpinionatedStructured (CMS)

Very SimpleSimpleComplex

No DBORMContent Types

Little ReuseSome ReuseEasy Reuse

Performance

http://blog.curiasolutions.com/the-great-web-framework-shootout/

Performance

http://plope.com/pyroptimization

Install

$ virtualenv \ --no-site-packages \ --distribute \ newproject $ cd newproject $ bin/pip install pyramid

Hello World

from paste.httpserver import serve from pyramid.configuration import Configurator from pyramid.response import Response

def hello_world(context, request): return Response('Hello world!')

if __name__ == '__main__': config = Configurator() config.begin() config.add_view(hello_world) config.end() app = config.make_wsgi_app() serve(app, host='0.0.0.0')

config.add_route('myroute', '/prefix/{one}/{two}')config.add_view(hello_world, route_name='myroute')

foo/{baz}/{bar}*fizzlefoo/{baz}/{bar}{fizzle:.*}

Also custom predicates

Routes (URL Dispatch)

View Callables

from pyramid.response import Responsedef hello_world(request): return Response('Hello world!')

from pyramid.httpexceptions import HTTPFoundclass MyView(object): def __init__(self, request): self.request = request

def __call__(self): raise HTTPFound(location='http://example.com')

Request

/prefix/foo/bar?pref=red&pref=blue; def hello_world(request): assert 'blue' == request.params['pref'] assert ['red,'blue] == request.params.getall('pref') assert ['foo','bar'] == request.matchdict.values() return Response('Hello world!')

Renderers

from pyramid.view import view_config

@view_config(renderer='json')def hello_world(request): return {'content':'Hello!'}

@view_config(renderer='string')def hello_world(request): return {'content':'Hello!'}

@view_config(renderer='mypackage:templates/foo.mak')

Add your own - config.add_renderer('.jinja2', 'mypackage.MyJinja2Renderer')

Templates

from pyramid.renderers import render_to_response

def sample_view(request): return render_to_response('templates/foo.pt', {'foo':1, 'bar':2}, request=request)

Templates

from pyramid.renderers import render_to_response

def sample_view(request): return render_to_response('templates/foo.pt', {'foo':1, 'bar':2}, request=request)

BYO Templating

from mako.template import Templatefrom pyramid.response import Response

def make_view(request): template = Template(filename='/templates/template.mak') result = template.render(name=request.params['name']) response = Response(result) return response

Chameleon ZPT Templates

Compiled to python really fast

XHTML complaint

.pt files

${project} Application Welcome to ${project}, an application generated by the