Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ZHGDG_HOA.9_Py的困惑和突破

Zoom.Quiet
August 18, 2014

 ZHGDG_HOA.9_Py的困惑和突破

Zoom.Quiet

August 18, 2014
Tweet

More Decks by Zoom.Quiet

Other Decks in Technology

Transcript

  1. blog.py   import  web   urls  =  (    

     "",  "reblog",      "/(.*)",  "blog"   )     class  reblog:          def  GET(self):  raise  web.seeother('/')     class  blog:          def  GET(self,  path):                  return  "blog  "  +  path     app_blog  =  web.application(urls,  locals())  
  2. main.py   import  web   import  blog   urls  =

     (      "/blog",  blog.app_blog,      "/(.*)",  "index"   )     class  index:          def  GET(self,  path):                  return  "hello  "  +  path     app  =  web.application(urls,  locals())   if  __name__  ==  "__main__":          app.run()  
  3. simple_page.py   from  flask  import  Blueprint,  render_template,  abort   from

     jinja2  import  TemplateNotFound     simple_page  =  Blueprint('simple_page',  __name__,                                                  template_folder='templates')     @simple_page.route('/',  defaults={'page':  'index'})   @simple_page.route('/<page>')   def  show(page):          try:                  return  render_template('pages/%s.html'  %  page)          except  TemplateNotFound:                  abort(404)  
  4. main.py   from  flask  import  Flask   from  yourapplication.simple_page  import

     simple_page     app  =  Flask(__name__)   app.register_blueprint(simple_page)  
  5. main.py   if  __name__  ==  '__main__':        

     config.scan('someotherpackage')          config.add_view('mypackage.views.myview',   name='myview')  
  6. Overriding  Views   def  configure_views(config):          config.add_view('theoriginalapp.views.theview',

      name='theview')     ---------------------------------------------------     from  pyramid.config  import  Configurator   from  originalapp  import  configure_views   if  __name  ==  '__main__':          config  =  Configurator()          config.include(configure_views)          config.add_view('theoverrideapp.views.theview',   name='theview')  
  7. setup.py    entry_points="""              #

     -*-  Entry  points:  -*-              [wa.plugin]              wa_admin=wa.plugins.admin.pluginimpl:PluginImpl              """,  
  8. plugin  interface   class  PluginInterface(object):          def

     __init__(self,  config):                  self._config  =  config          def  blueprints(self):                  '''                  Return  all  blueprints  this  plugin  contained.                  '''                  raise  NotImplemented()  
  9. get/scan  plugin(s)   import  pkg_resources   class  PluginFinder(object):    

         def  __init__(self,  group,  name=None):…          def  all_plugins(self,  filter=None):                  if  filter:                          for  i  in  pkg_resources.iter_entry_points(self._group,   self._name):                                  if  filter(i):                                          yield  i.load()                  else:  …   def  plugin(self,  prj,  name):                  return  pkg_resources.load_entry_point(prj,  self._group,  name)  
  10. plugin  impl   from  flask  import  Blueprint   from  wa.plugin

     import  PluginInterface   admin  =  Blueprint('admin',  __name__,                  static_folder='../static’,  template_folder='../templates')     class  PluginImpl(PluginInterface):          def  __init__(self,  config):                  PluginInterface.__init__(self,  config)            def  blueprints(self):                        return  [                                  (index,  {'url_prefix':'/index'}),                        ]