[PYTHON] Hinweise zum Pyramiden-Tutorial (single_file_tasks)

single_file_tasks Notieren Sie sich, was Sie im Tutorial gelernt haben.

download

Dateiorganisation

Datei Erläuterung
tasks.py python code
schema.sql Anfängliche DB-Einstellung SQL
tasks.db Aufgabendaten speichern
static/style.css css
templates/layout.mako layout
templates/new.mako Aufgabenerstellung
templates/list.mako Aufgabenliste
templates/notfound.mako 404

Hauptverarbeitung


    #Erklärung
    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')
    #Erstellen Sie eine Sitzung. Die Sitzung basiert auf Cookies.(document.Sie können es mit einem Cookie überprüfen.)
    session_factory = UnencryptedCookieSessionFactoryConfig('itsaseekreet')

    #Gießen Sie die Einstellungen in die Pyramide
    config = Configurator(settings=settings, session_factory=session_factory)
    #Pfadeinstellung
    config.add_route('list', '/')
    config.add_route('new', '/new')
    config.add_route('close', '/close/{id}')
    #Angeben eines statischen Pfads
    config.add_static_view('static', os.path.join(here, 'static'))
    #Dekorateur (@view_config und@Abonnenten suchen) und zu den Einstellungen hinzufügen
    config.scan()

    #Webserver-Einstellungen
    app = config.make_wsgi_app()
    server = make_server('0.0.0.0', 8080, app)
    server.serve_forever()

pyramid.events.subscriber

Beispiel

Anforderungen werden zuerst für Anforderungen ausgeführt. (preExecute () synchron) Die DB-Verbindungsverarbeitung wird ausgeführt. Der Vorgang zum Trennen der DB-Verbindung am Ende der Anforderung ist enthalten. (postExecute)

Wird nur einmal unmittelbar nach dem Start des Webservers aufgerufen.

pyramid.httpexceptions.HTTPFound

Leitet zu einer bestimmten Seite um, um eine doppelte Registrierung durch erneutes Laden der Seite zu verhindern.

logging

python


import logging
logging.basicConfig()
log = logging.getLogger(__file__)
log.warn('NewRequest')

@reify

Es speichert das Ergebnis der Funktion zwischen und gibt nur das Ergebnis ohne Verarbeitung nach dem ersten Mal zurück.

pyramid.session

python


  session_factory = UnencryptedCookieSessionFactoryConfig('itsaseekreet')
  config = Configurator(settings=settings, session_factory=session_factory)

python


  request.session.flash('Task was successfully reopen!')  #Legen Sie den Wert für die Sitzung fest
  #Vorlagenseite:
  % if request.session.peek_flash(): #Überprüfen Sie, ob die Sitzung einen Wert hat
      request.session.pop_flash()     #Sitzungswert anzeigen
  % endif

sqlite3

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()]

Holen Sie sich nur 1 Datensatz


    row = rs.fetchone()
    tasks = [dict(id=row[0], name=row[1])]

Beziehen Sie sich auf das Ergebnis der Auswahl nach Spaltennamen


    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'])  #Typkonvertierung und Set
  #placeholder
  request.db.execute("update tasks set closed = ? where id = ?", (0, task_id))
  request.db.commit()  #Es wird nicht gespeichert, es sei denn, Sie verpflichten sich.

Auto Commit ON


    request.db = sqlite3.connect(settings['db'])
    request.db.isolation_level = None
#Oder
    request.db = sqlite3.connect(settings['db'], isolation_level = None)

rollback


  request.db.rollback()

pyramid.config.Configurator

Speichern Sie den Wert im Konfigurator


mysettings['val'] = "hello"
config = Configurator(settings=mysettings)

Beziehen Sie sich auf den im Konfigurator gespeicherten Wert(@subscribers)


request = event.request
settings = request.registry.settings
log.warn(settings['val'])

Beziehen Sie sich auf den im Konfigurator gespeicherten Wert(@view)


settings = request.registry.settings
log.warn(settings['val'])

py:development.ini、production.Fordern Sie den Wert von ini an.registry.In Einstellungen speichern


{'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}

Seite 404

python


@view_config(context='pyramid.exceptions.NotFound', renderer='notfound.mako')
def notfound_view(request):
    request.response.status = '404 Not Found'
    return {}

Ausnahmen abfangen

python


@view_config(context=Exception, renderer='exception.mako')
def error_view(exception, request):
    return {'message':exception}

Andere

Holen Sie sich das Dateiverzeichnis (absoluter Pfad)

python


here = os.path.dirname(os.path.abspath(__file__))

Anwendungsbeispiel


os.path.join(here, 'schema.sql')
settings['mako.directories'] = os.path.join(here, 'templates')

Recommended Posts

Hinweise zum Pyramiden-Tutorial (single_file_tasks)
Pyramide Tutorial Memo (Bankkonto)
Pyramide
Ein Memo, dass ich das Pyramid Tutorial ausprobiert habe