[PYTHON] notes du didacticiel sur la pyramide (single_file_tasks)

single_file_tasks Notez ce que vous avez appris dans le didacticiel.

download

organisation des fichiers

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

pyramid.events.subscriber

Exemple

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.

pyramid.httpexceptions.HTTPFound

Redirige vers une page spécifique pour éviter une double inscription en rechargeant la page.

logging

python


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

@reify

Il met en cache le résultat de la fonction et renvoie uniquement le résultat sans traitement après la première fois.

pyramid.session

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

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

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

pyramid.config.Configurator

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}

Épisode 404

python


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

Attrapez n'importe quelle exception

python


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

Autre

Récupère le répertoire de fichiers (chemin absolu)

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')

Recommended Posts

notes du didacticiel sur la pyramide (single_file_tasks)
mémo tutoriel pyramide (compte bancaire)
pyramide
Un mémo que j'ai essayé le tutoriel Pyramid