single_file_tasks Make a note of what you learned in the tutorial.
| File | Description | 
|---|---|
| tasks.py | python code | 
| schema.sql | Initial DB settings sql | 
| tasks.db | Store task data | 
| static/style.css | css | 
| templates/layout.mako | layout | 
| templates/new.mako | Task creation | 
| templates/list.mako | Task list | 
| templates/notfound.mako | 404 | 
main processing
    #Declaration
    settings = {}
    settings['reload_all'] = True
    settings['debug_all'] = True
    settings['mako.directories'] = os.path.join(here, 'templates')
    settings['db'] = os.path.join(here, 'tasks.db')
    #Create session. session is cookie based.(document.You can check it with a cookie.)
    session_factory = UnencryptedCookieSessionFactoryConfig('itsaseekreet')
    #Pour settings into pyramid
    config = Configurator(settings=settings, session_factory=session_factory)
    #Path setting
    config.add_route('list', '/')
    config.add_route('new', '/new')
    config.add_route('close', '/close/{id}')
    #Specifying a static path
    config.add_static_view('static', os.path.join(here, 'static'))
    #Decorator (@view_config and@Find subscriber) and add it to the settings
    config.scan()
    #web server settings
    app = config.make_wsgi_app()
    server = make_server('0.0.0.0', 8080, app)
    server.serve_forever()
Requests are executed first for requests. (preExecute () in synfony) DB connection processing is in progress. The process to disconnect the DB connection at the end of the request is included. (postExecute)
Called only once immediately after the web server is started.
return HTTPFound(location=request.route_url('list'))Redirects to a specific page to prevent double registration by reloading the page.
python
import logging
logging.basicConfig()
log = logging.getLogger(__file__)
log.warn('NewRequest')
It caches the result of the function and returns only the result without processing after the first time.
python
  session_factory = UnencryptedCookieSessionFactoryConfig('itsaseekreet')
  config = Configurator(settings=settings, session_factory=session_factory)
python
  request.session.flash('Task was successfully reopen!')  #Set value for session
  #template side:
  % if request.session.peek_flash(): #Check if the session has a value
      request.session.pop_flash()     #Show session value
  % endif
select
  rs = request.db.execute("select id, name from tasks where closed = 0")
  tasks = [dict(id=row[0], name=row[1]) for row in rs.fetchall()]
Get only 1 record
    row = rs.fetchone()
    tasks = [dict(id=row[0], name=row[1])]
Refer to the result of select by column name
    request.db = sqlite3.connect(settings['db'])
+   request.db.row_factory = sqlite3.Row
-   tasks = [dict(id=row[0], name=row[1]) for row in rs.fetchall()]
+   tasks = [dict(id=row["id"], name=row["name"]) for row in rs.fetchall()]
update
  task_id = int(request.matchdict['id'])  #Type conversion and set
  #placeholder
  request.db.execute("update tasks set closed = ? where id = ?", (0, task_id))
  request.db.commit()  #It will not be saved unless you commit.
Auto commit ON
    request.db = sqlite3.connect(settings['db'])
    request.db.isolation_level = None
#Or
    request.db = sqlite3.connect(settings['db'], isolation_level = None)
rollback
  request.db.rollback()
Store value in Configurator
mysettings['val'] = "hello"
config = Configurator(settings=mysettings)
Refer to the value stored in Configurator(@subscribers)
request = event.request
settings = request.registry.settings
log.warn(settings['val'])
Refer to the value stored in Configurator(@view)
settings = request.registry.settings
log.warn(settings['val'])
py:development.inićproduction.request the value of ini.registry.Store in settings
{'debug_routematch': True, 
 'pyramid.default_locale_name': 'en',
 'db': '/home/user/local/virtualenv/tasks/tasks.db',
 'pyramid.reload_templates': True,
 'debug_templates': True,
 'debug_all': True,
 'reload_templates': True,
 'mako.directories': '/home/user/local/virtualenv/tasks/templates',
 'pyramid.debug_routematch': True,
 'reload_resources': True,
 'default_locale_name': 'en',
 'pyramid.reload_assets': True,
 'reload_all': True,
 'debug_authorization': True,
 'pyramid.debug_authorization': True,
 'pyramid.reload_resources': True,
 'reload_assets': True,
 'pyramid.debug_notfound': True,
 'pyramid.debug_templates': True,
 'prevent_http_cache': False,
 'debug_notfound': True,
 'pyramid.prevent_http_cache': False}
python
@view_config(context='pyramid.exceptions.NotFound', renderer='notfound.mako')
def notfound_view(request):
    request.response.status = '404 Not Found'
    return {}
$ {request.route_url ('forbidden_page')}python
@view_config(context=Exception, renderer='exception.mako')
def error_view(exception, request):
    return {'message':exception}
python
here = os.path.dirname(os.path.abspath(__file__))
Example of use
os.path.join(here, 'schema.sql')
settings['mako.directories'] = os.path.join(here, 'templates')