99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Pyramid 包結(jié)構(gòu)

2023-03-30 17:55 更新

Cookiecutter 工具會(huì)在同名的父項(xiàng)目文件夾中自動(dòng)創(chuàng)建一個(gè)包文件夾。該包文件夾由以下文件和子文件夾組成。

init.py

一個(gè)文件夾需要 __init__.py 文件,這樣它才能被當(dāng)作一個(gè) Python 包。 testproj 包也有這個(gè)文件,它基本上聲明了Pyramid WSGI應(yīng)用項(xiàng)目,以便development.ini將其作為入口點(diǎn)。

應(yīng)用程序?qū)ο笫怯?nbsp;main() 函數(shù)返回的。它通過包括運(yùn)行cookiecutter時(shí)選擇的模板庫來配置應(yīng)用程序注冊(cè)表,包括 路由 模塊,并通過掃描現(xiàn)有的包將視圖添加到配置器中。下面的Python代碼被自動(dòng)生成為 __init__.py 文件。

from pyramid.config import Configurator
def main(global_config, **settings):
   """ This function returns a Pyramid WSGI application.
   """
   with Configurator(settings=settings) as config:
      config.include('pyramid_jinja2')
      config.include('.routes')
      config.include('.models')
      config.scan()
   return config.make_wsgi_app()

routes.py

Cookiecutter工具自動(dòng)生成一個(gè)Python腳本,其中有一個(gè)名為 includeme()的 函數(shù) 。 它添加了一個(gè)靜態(tài)路由和一個(gè)指向’/’URL模式的主頁路由。

def includeme(config):
   config.add_static_view('static', 'static', cache_max_age=3600)
   config.add_route('home', '/')

這些路由是由上面解釋的 __init__.py 文件中的 main () 函數(shù)添加到應(yīng)用程序的配置中。

視圖包

項(xiàng)目包(在我們的例子中是 testproj 包)包含這個(gè)視圖子包–一個(gè)包含空白的 __init__.py 的文件夾,一個(gè)名為default.py的Python模塊,包含定義一個(gè)名為 my_view() 的視圖函數(shù) 。 它將項(xiàng)目的名稱作為上下文發(fā)送到預(yù)先建立的模板 mytemplate.jinja2中 。

from pyramid.view import view_config
from pyramid.response import Response
from sqlalchemy.exc import SQLAlchemyError
from .. import models

@view_config(route_name='home', renderer='testproj:templates/mytemplate.jinja2')
def my_view(request):
   try:
      query = request.dbsession.query(models.MyModel)
      one = query.filter(models.MyModel.name == 'one').one()
   except SQLAlchemyError:
      return Response(db_err_msg, content_type='text/plain', status=500)
   return {'one': one, 'project': 'testproj'}

db_err_msg = """\
Pyramid is having a problem using your SQL database.
....
"""

default.py 腳本也導(dǎo)入了models子包中 mymodel 的定義。這個(gè)視圖包還在notfound.py文件中定義了一個(gè) notfound 視圖。

from pyramid.view import notfound_view_config
@notfound_view_config(renderer='testproj:templates/404.jinja2')
def notfound_view(request):
   request.response.status = 404
   return {}

靜態(tài)文件夾

testproj 包文件夾下的這個(gè)文件夾包含了Pyramid標(biāo)志文件和主頁的theme.CSS。

模板文件夾

我們知道,網(wǎng)頁模板需要存儲(chǔ)在templates文件夾中。這個(gè)子文件夾包含jinja2模板。這里我們有一個(gè)名為 layout.jinja2 的基礎(chǔ)模板,它被 mytemplate.jinja2 繼承,由 my_view() 視圖函數(shù)呈現(xiàn)。

{% extends "layout.jinja2" %}

{% block content %}
<div class="content">
   <h1><span class="font-semi-bold">Pyramid</span> <span class="smaller">Starter project</span></h1>
   <p class="lead">Welcome to <span class="font-normal">{{project}}</span>, a Pyramid application generated by<br><span class="font-normal">Cookiecutter</span>.</p>
</div>
{% endblock content %}

模型包

在 tesptproj 包文件夾下的這個(gè)子包包含了 mymodel.py ,它有SQLAlchemy模型的定義,名為 MyModel。

from sqlalchemy import (
   Column,
   Index,
   Integer,
   Text,
)

from .meta import Base
class MyModel(Base):
   __tablename__ = 'models'
   id = Column(Integer, primary_key=True)
   name = Column(Text)
   value = Column(Integer)
Index('my_index', MyModel.name, unique=True, mysql_length=255)

meta.py 在SQLAlchemy中聲明了一個(gè)聲明性基類的對(duì)象。

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.schema import MetaData

NAMING_CONVENTION = {
   "ix": "ix_%(column_0_label)s",
   "uq": "uq_%(table_name)s_%(column_0_name)s",
   "ck": "ck_%(table_name)s_%(constraint_name)s",
   "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
   "pk": "pk_%(table_name)s"
}
metadata = MetaData(naming_convention=NAMING_CONVENTION)
Base = declarative_base(metadata=metadata)


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)