single_file_tasks Notez ce que vous avez appris dans le didacticiel.
Fichier | La description |
---|---|
tasks.py | python code |
schema.sql | Paramètre initial de la base de données sql |
tasks.db | Stocker les données de tâche |
static/style.css | css |
templates/layout.mako | layout |
templates/new.mako | Création de tâches |
templates/list.mako | Liste de tâches |
templates/notfound.mako | 404 |
traitement principal
#Déclaration
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')
#Créez une session. la session est basée sur les cookies.(document.Vous pouvez le vérifier avec un cookie.)
session_factory = UnencryptedCookieSessionFactoryConfig('itsaseekreet')
#Verser les paramètres dans la pyramide
config = Configurator(settings=settings, session_factory=session_factory)
#Réglage du chemin
config.add_route('list', '/')
config.add_route('new', '/new')
config.add_route('close', '/close/{id}')
#Spécifier un chemin statique
config.add_static_view('static', os.path.join(here, 'static'))
#Décorateur (@view_config et@Trouver un abonné) et l'ajouter aux paramètres
config.scan()
#paramètres du serveur Web
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever()
Les requêtes sont exécutées en premier pour les requêtes. (preExecute () dans synfony) Le traitement de la connexion à la base de données est en cours. Le processus de déconnexion de la connexion DB à la fin de la demande est inclus. (postExecute)
Appelé une seule fois immédiatement après le démarrage du serveur Web.
return HTTPFound(location=request.route_url('list'))
Redirige vers une page spécifique pour éviter une double inscription en rechargeant la page.
python
import logging
logging.basicConfig()
log = logging.getLogger(__file__)
log.warn('NewRequest')
Il met en cache le résultat de la fonction et renvoie uniquement le résultat sans traitement après la première fois.
python
session_factory = UnencryptedCookieSessionFactoryConfig('itsaseekreet')
config = Configurator(settings=settings, session_factory=session_factory)
python
request.session.flash('Task was successfully reopen!') #Définir la valeur de la session
#côté modèle:
% if request.session.peek_flash(): #Vérifiez si la session a une valeur
request.session.pop_flash() #Afficher la valeur de la session
% 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()]
Obtenez seulement 1 enregistrement
row = rs.fetchone()
tasks = [dict(id=row[0], name=row[1])]
Se référer au résultat de la sélection par nom de colonne
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']) #Conversion de type et définition
#placeholder
request.db.execute("update tasks set closed = ? where id = ?", (0, task_id))
request.db.commit() #Il ne sera enregistré que si vous vous engagez.
Validation automatique activée
request.db = sqlite3.connect(settings['db'])
request.db.isolation_level = None
#Ou
request.db = sqlite3.connect(settings['db'], isolation_level = None)
rollback
request.db.rollback()
Stocker la valeur dans le configurateur
mysettings['val'] = "hello"
config = Configurator(settings=mysettings)
Se référer à la valeur stockée dans le configurateur(@subscribers)
request = event.request
settings = request.registry.settings
log.warn(settings['val'])
Se référer à la valeur stockée dans le configurateur(@view)
settings = request.registry.settings
log.warn(settings['val'])
py:development.ini、production.demander la valeur de ini.registry.Stocker dans les paramètres
{'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 ('page_interdite')}
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__))
Exemple d'utilisation
os.path.join(here, 'schema.sql')
settings['mako.directories'] = os.path.join(here, 'templates')