帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:版本  Pyramid  WEB  TODO  
The Pyramid version of the todo app for the Python Web Shootout

  • 源代码名称:todopyramid
  • 源代码网址:http://www.github.com/indypy/todopyramid
  • todopyramid源代码文档
  • todopyramid源代码下载
  • Git URL:
    git://www.github.com/indypy/todopyramid.git
  • Git Clone代码到本地:
    git clone http://www.github.com/indypy/todopyramid
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/indypy/todopyramid
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • ToDo Pyramid 应用程序

    这是 python Web Shootout的Pyramid 应用程序。

    请在这里尝试:http://demo.todo.sixfeetup.com

    安装

    你可以按照安装过程中的 Pyramid 文档中的说明进行操作。

    安装 python 和 virtualenv 后,你可以执行以下操作:

    
    $ mkdir ~/.virtualenvs
    
    
    $ cd ~/.virtualenvs
    
    
    $ virtualenv -p python2.7 todopyramid
    
    
    $ cd todopyramid
    
    
    $ source bin/activate
    
    
    
    

    这将创建新的虚拟环境,现在你可以安装应用。

    
    (todopyramid)$ cd ~/Desktop
    
    
    (todopyramid)$ git clone https://github.com/indypy/todopyramid.git
    
    
    (todopyramid)$ cd todopyramid
    
    
    (todopyramid)$ pip install -r requirements.txt -e. 
    
    
    
    

    这给了我们完成的应用的最终结果。 如果是第一次运行该应用程序,则需要初始化数据库。

    
    (todopyramid)$ initialize_todopyramid_db development.ini
    
    
    
    

    现在可以通过执行以下操作启动它。

    
    (todopyramid)$ pserve development.ini
    
    
    
    

    现在去 http://localhost:6543 享受 !

    :香肠的制作方法

    上安装指导告诉你如何启动已经完成的应用程序。 在这里我们将记录应用程序是如何从头创建的。

    第一步

    通过创建 virtualenv 并将 Pyramid 安装到其中开始。

    
    (todopyramid)$ pip install pyramid
    
    
    
    

    这给了我们一个起点和 pcreate 命令来创建一个新的应用程序。 在本例中,我们使用了 alchemy

    
    (todopyramid)$ cd ~/Desktop
    
    
    (todopyramid)$ pcreate -s alchemy todopyramid
    
    
    
    

    由于我们负责开发人员,我们首先要做的是将这个代码放入版本控制中。

    
    (todopyramid)$ cd todopyramid
    
    
    (todopyramid)$ git init
    
    
    (todopyramid)$ git add. 
    
    
    (todopyramid)$ git commit -m 'initial package from pcreate alchemy scaffold'
    
    
    
    

    首次启动应用程序之前,我们需要安装已经创建的新包,以及它的所有依赖项。

    
    (todopyramid)$ python2.7 setup.py develop
    
    
    
    

    现在我们已经安装了一些软件包,我们需要冻结软件包列表。

    
    (todopyramid)$ pip freeze> requirements.txt
    
    
    (todopyramid)$ git add requirements.txt
    
    
    (todopyramid)$ git commit -m 'committing first version of requirements file'
    
    
    
    

    现在让我们初始化数据库。 在我们的示例中,我们将使用 SQLite。

    
    (todopyramid)$ initialize_todopyramid_db development.ini
    
    
    
    

    我们不想签入数据库,将它添加到 .gitignore 文件中。

    
    (todopyramid)$ echo"todopyramid.sqlite">. gitignore
    
    
    (todopyramid)$ git add. gitignore
    
    
    (todopyramid)$ git commit -m 'ignore the SQLite database'
    
    
    
    

    现在我们可以启动应用程序,看看它是什么样子。

    
    (todopyramid)$ pserve development.ini
    
    
    
    

    这将包括来自 Alchemy 模板的所有样板代码。

    删除样板文件

    对于我们的目的,我们不需要添加的一些样板代码。 我们会把它去掉的。

    
    (todopyramid)$ git rm static/*
    
    
    (todopyramid)$ touch static/.gitignore
    
    
    (todopyramid)$ git add static/.gitignore
    
    
    (todopyramid)$ git rm templates/*
    
    
    (todopyramid)$ git commit -m 'removing boilerplate templates'
    
    
    
    

    我们在 static 目录中放置了一个 .gitignore,以便目录保持不变。 我们将很快在 templates 目录中添加模板,因此该目录不需要。

    让我们 fancy

    现在,我们准备开始添加定制。 我们要做的第一件事是添加 Bootstrap 以简化布局的创建。 因为我们将使用变形在以后创建表单,我们将使用 deform_bootstrap封装。

    将它添加到 setup.py

    
    requires = [
    
    
     #.. .
    
    
     'deform_bootstrap',
    
    
    ]
    
    
    
    

    然后我们需要提取它的依赖关系。 然后更新 requirements.txt 文件。

    
    (todopyramid)$ python2.7 setup.py develop
    
    
    (todopyramid)$ pip freeze> requirements.txt
    
    
    
    

    然后将 static 资源添加到 __init__.py

    
    # Adding the static resources from Deform
    
    
    config.add_static_view('deform_static', 'deform:static', cache_max_age=3600)
    
    
    config.add_static_view('deform_bootstrap_static', 'deform_bootstrap:static', cache_max_age=3600)
    
    
    
    

    现在我们需要得到模板结构。 我们将添加一个具有以下( 参见创建自定义用户体验,以获得更多的细节)的todopyramid/layouts.py:

    
    ifrom pyramid.renderers import get_renderer
    
    
    from pyramid.decorator import reify
    
    
    
    class Layouts(object):
    
    
    
     @reify
    
    
     def global_template(self):
    
    
     renderer = get_renderer("templates/global_layout.pt")
    
    
     return renderer.implementation().macros['layout']
    
    
    
    

    添加至少具有以下( 查看完整模板的源代码)的global_layout.pt:

    
    <!DOCTYPE html>
    
    
     <!-- The layout macro below is what is referenced in the layouts.Laytouts.global_template -->
    
    
    <html lang="en" metal:define-macro="layout">
    
    
     <head>
    
    
    
     <!-- Styles from Deform Bootstrap -->
    
    
     <link rel="stylesheet" href="${request.static_url('deform_bootstrap:static/deform_bootstrap.css')}" type="text/css" media="screen" charset="utf-8"/>
    
    
     <link rel="stylesheet" href="${request.static_url('deform_bootstrap:static/chosen_bootstrap.css')}" type="text/css" media="screen" charset="utf-8"/>
    
    
     <link rel="stylesheet" href="${request.static_url('deform:static/css/ui-lightness/jquery-ui-1.8.11.custom.css')}" type="text/css" media="screen" charset="utf-8"/>
    
    
     </head>
    
    
    
     <body>
    
    
     <div class="container">
    
    
     <!-- This is where our subsequent templates will fill in content -->
    
    
     <div metal:define-slot="content">
    
    
     Site content goes here
    
    
     </div>
    
    
     </div>
    
    
    
     <!-- The javascript resources from Deform -->
    
    
     <script src="${request.static_url('deform:static/scripts/jquery-1.7.2.min.js')}"></script>
    
    
     <script src="${request.static_url('deform_bootstrap:static/jquery-ui-1.8.18.custom.min.js')}"></script>
    
    
     <script src="${request.static_url('deform_bootstrap:static/jquery-ui-timepicker-addon-0.9.9.js')}"></script>
    
    
     <script src="${request.static_url('deform:static/scripts/deform.js')}"></script>
    
    
     <script src="${request.static_url('deform_bootstrap:static/deform_bootstrap.js')}"></script>
    
    
     <script src="${request.static_url('deform_bootstrap:static/bootstrap.min.js')}"></script>
    
    
     <script src="${request.static_url('deform_bootstrap:static/bootstrap-datepicker.js')}"></script>
    
    
     <script src="${request.static_url('deform_bootstrap:static/bootstrap-typeahead.js')}"></script>
    
    
     <script src="${request.static_url('deform_bootstrap:static/jquery.form-2.96.js')}"></script>
    
    
     <script src="${request.static_url('deform_bootstrap:static/jquery.maskedinput-1.3.js')}"></script>
    
    
     </body>
    
    
    </html>
    
    
    
    

    现在我们必须修改样板视图以使用 todopyramid/views.py 中的布局,注意我们也更改了视图名称和模板名称,以反映这里视图所做的,显示 home 页面。

    
    from. layouts import Layouts
    
    
    
    class ToDoViews(Layouts):
    
    
    
     def __init__(self, context, request):
    
    
     self.context = context
    
    
     self.request = request
    
    
    
     @view_config(route_name='home', renderer='templates/home.pt')
    
    
     def home_view(request):
    
    
     # view code here
    
    
     return {}
    
    
    
    

    现在我们可以在应用程序中添加一个 todopyramid/templates/home.pt,如下所示

    
    <metal: master use-macro="view.global_template">
    
    
     <div metal:fill-slot="content">
    
    
     <h1>Home</h1>
    
    
     <p>Welcome to the Pyramid version of the ToDo app.</p>
    
    
     </div>
    
    
    </metal:master>
    
    
    
    

    现在可以用相同的方式设置后续模板。

    身份验证

    我们的应用程序需要授权用户才能添加待办事项列表。 Pyramid,Having 没有关于这个问题的意见,让我们有无数的选择。 一种快速的方法是利用的Mozilla登录系统。 这里正好有一个插件,这个叫 pyramid_persona的插件。

    按照角色插件的文档,我们将它添加到应用程序的依赖项,构建最新版本并在配置中包含插件。

    为了将登录表单集成到全局模板布局中,我们还覆盖了默认的禁止视图。

    找不到

    为了保持外观,我们添加了一个自定义的不能集成到全局布局中的视图。 这是非常简单的使用 pyramid.view.notfound_view_config 服务。

    模型

    现在我们已经为应用创建了 shell,现在是创建一些模型的时候了。 在本例中我们将使用 Sqlalchemy 插件,因为它符合我们应用程序的。

    我们将创建一个 TodoItemTag 模型以开始。 这将为我们提供待办事项列表的基础。



    文章标签:WEB  版本  TODO  Pyramid  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语