single_file_tasks Notieren Sie sich, was Sie im Tutorial gelernt haben.
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()
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.
return HTTPFound(location=request.route_url('list'))
Leitet zu einer bestimmten Seite um, um eine doppelte Registrierung durch erneutes Laden der Seite zu verhindern.
python
import logging
logging.basicConfig()
log = logging.getLogger(__file__)
log.warn('NewRequest')
Es speichert das Ergebnis der Funktion zwischen und gibt nur das Ergebnis ohne Verarbeitung nach dem ersten Mal zurück.
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
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()
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}
python
@view_config(context='pyramid.exceptions.NotFound', renderer='notfound.mako')
def notfound_view(request):
request.response.status = '404 Not Found'
return {}
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__))
Anwendungsbeispiel
os.path.join(here, 'schema.sql')
settings['mako.directories'] = os.path.join(here, 'templates')