Python Pyramid 命令行

Python Pyramid 命令行

Pyramid库中有一个 scripts 子包,其中包含一些可用于控制和检查Pyramid应用程序的Python脚本。这些模块既可以作为可导入的模块使用,也可以从命令提示符中使用。因此,它们通常被称为命令行脚本。

这些命令行脚本包括:

  • pserve − 用于服务使用PasteDeploy配置文件的Web应用程序。

  • pviews − 显示给定URL的匹配视图。

  • pshell − 交互式Shell。

  • proutes − 显示所有应用程序路由。

  • ptweens − 显示”Tweens”。

  • prequest − 调用请求。

  • pdistreport − 显示所有已安装的分发和它们的版本。

所有这些命令行脚本使用PasteDeploy配置文件(development.ini)。

pserve

这是最重要的脚本。通过选择的服务器(Waitress)和指定的主机和端口(localhost:6543),在“development.ini” [app:main]部分配置的Pyramid应用程序将被提供服务。

假设Pyramid项目(testproj)创建在同名文件夹中的Pyramid虚拟环境中,则以下命令开始监听传入的浏览器请求 −

Env>..\scripts\pserve development.ini

pserve 模块(以及其他Pyramid命令行脚本)可以作为Python解释器的参数在命令提示符中运行。

Env>python -m pyramid.scripts.pserve development.ini
Starting server in PID 1716.
2022-06-23 14:13:51,492 INFO [waitress:485][MainThread] Serving on http://[::1]:6543
2022-06-23 14:13:51,492 INFO [waitress:485][MainThread] Serving on http://127.0.0.1:6543

为了使实用程序更加灵活,可以使用以下命令行参数:−

  • config_uri − 配置文件的URI。

  • -n <name> − 加载指定的应用程序(默认为main)。

  • -s <server_type> − 使用指定的服务器。

  • --server-name <section_name> − 使用在配置文件中定义的指定服务器(默认为main)。

  • --reload − 使用自动重启文件监视器。

  • -b − 打开一个 Web 浏览器到服务器的 URL。

此应用程序在 http://localhost:6543 上提供服务,此时仅限同一计算机上运行的浏览器访问。如果你想让同一网络中的其他计算机访问,则需要编辑 “development.ini” 文件,并替换 [server:main] 部分中的监听值,如下所示−

[server:main]
use = egg:waitress#main
listen = *:6543

设置 *:6543 相当于 0.0.0.0:6543 [::]:6543,因此应用程序响应系统拥有的所有IP地址的请求,而不仅仅是本地主机的请求。

命令行中的 –reload 选项会在运行的代码被修改时自动重新加载应用程序。

使用 –reload 选项启动应用程序。

pserve development.ini --reload
Starting monitor for PID 36224.
Starting server in PID 36224.
Serving on http://localhost:6543
Serving on http://localhost:6543

如果对项目的.py文件或.ini文件进行任何更改,服务器将自动重新启动−

testproj/development.ini changed; reloading ...
Gracefully killing the server.
Starting monitor for PID 36286.
Starting server in PID 36286.
Serving on http://localhost:6543
Serving on http://localhost:6543

pviews

命令行脚本中使用 pviews 用于在命令终端窗口中打印给定URL的匹配路由和视图的概要信息。 pviews 命令接受两个参数。第一个参数是您的应用程序的 “.ini” 文件的路径和其中的部分名。这应该是以下格式: config_file#section_name (默认值为main)。第二个参数是要测试匹配视图的URL。

让我们在我们之前使用Cookiecutter构建的testproj项目中,使用development.ini文件执行pviews命令。

Env>..\scripts\pviews development.ini /
URL = /
   context: <pyramid.traversal.DefaultRootFactory object at 0x000001DD39BF1DE0>
   view name:
   Route:
   ------
   route name: home
   route pattern: /
   route path: /
   subpath:

      View:
      -----
      testproj.views.default.my_view

输出结果显示在顶部的请求URL,下面显示所有匹配的视图以及它们的视图配置详情。在这个例子中,只有一个视图匹配,所以只有一个视图部分。

pshell

该pshell脚本使得可以从Python提示符与Pyramid应用程序的环境进行交互。此shell使用PasteDeploy配置文件,即development.ini作为命令行参数(如其他Pyramid脚本),并打开Python交互式shell。

Env>..\scripts\pshell development.ini
Python 3.10.1 (tags/v3.10.1:2cd268a, Dec 6 2021, 19:10:37) [MSC v.1929 64 bit (AMD64)] on win32
Type "help" for more information.

Environment:
   app                    The WSGI application.
   dbsession              <sqlalchemy.orm.session.Session object at 0x0000020E9F1452D0>
   models                 <module 'testproj.models' from 'f:\\pyram-env\\testproj\\testproj\\models\\__init__.py'>
   registry               Active Pyramid registry.
   request                Active request object.
   root                   Root of the default resource tree.
   root_factory           Default root factory used to create `root`.
   tm                     Single-thread implementation of `~transaction.interfaces.ITransactionManager`.

>>>

脚本读取配置,并将其中声明的对象作为Python对象提供,以便与之交互。我们可以从Python提示符中检查它们的行为。

>>> root
<pyramid.traversal.DefaultRootFactory object at 0x0000020E9E2507F0>
>>> registry
<Registry testproj>

注册表设置是从 “development.ini” 中读取到一个字典中。我们可以使用 for 循环遍历它的内容 –

>>> for k,v in registry.settings.items():
... print (k,":",v)
...
pyramid.reload_templates : True
pyramid.debug_authorization : False
pyramid.debug_notfound : False
pyramid.debug_routematch : False
pyramid.default_locale_name : en
pyramid.includes :
pyramid_debugtoolbar
sqlalchemy.url : sqlite:///…\testproj/testproj.sqlite
retry.attempts : 3
tm.manager_hook : <function explicit_manager at 0x000001D9E64E4550>

借助于在models.py中声明的SQLAlchemy模型,甚至可以与数据库进行交互。

当我们第一次完成cookiecutter步骤时,应用程序数据库在开始时被初始化。我们可以在“testproj.sqlite”数据库中找到一个包含一条记录的models表。

Python Pyramid 命令行

我们现在可以在Python提示符下访问这个表格,如下所示 –

>>> m=models.MyModel

>>> obj=dbsession.query(m).get(1)
>>> obj
<testproj.models.mymodel.MyModel object at 0x0000020E9FD96DA0>
>>> obj.name
'one'

在models表中添加一行。首先声明一个MyModel类的对象,并将其添加到dbsession中。

>>> tm.begin()
>>> obj=models.MyModel(id=2, name='two', value=2)
>>> dbsession.add(obj)
>>> tm.commit()

Pyramid使用在 pyramid_tm 包中声明的事务管理器对象tm。为了确认新记录是否已添加,检索它。

>>> obj=dbsession.query(models.MyModel).get(2)
>>> obj.name
'two'

这也可以通过实际查看SQLite GUI工具中的数据库模型表来确认。

Python Pyramid 命令行

prequest

prequest实用程序允许您在不实际启动服务器的情况下测试URL模式的响应。该命令需要配置文件和URL路径作为命令行参数。例如:

Env>prequest development.ini /

该命令生成了Cookiecutter首页的原始HTML响应,我们之前已经看到过。

有几个命令行选项可以使用。-d选项显示服务器返回的状态和头信息。要覆盖默认的GET请求方法,可以使用-m选项。

proutes

该命令行Pyramid脚本显示了添加到应用程序注册表的所有路由。它只接受一个参数,即配置文件(development.ini)。

proutes命令显示了testproj包的以下路由配置-

Env>proutes development.ini
Name                       Pattern                                                        View
----                       -------                                                        ----
__static/                  /static/*subpath                                               testproj:static/
home                       /                                                              testproj.views.default.my_view
debugtoolbar               /_debug_toolbar/*subpath                                       <unknown>
__/_debug_toolbar/static/  /_debug_toolbar/static/*subpath pyramid_debugtoolbar:static/

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程