- Python Pyramid教程
- Python Pyramid - 主页
- Python Pyramid - 概述
- Pyramid - 环境设置
- Python Pyramid - Hello World
- Pyramid - 应用程序配置
- Python Pyramid - URL 路由
- Python Pyramid - 查看配置
- Python Pyramid - 路由前缀
- Python Pyramid - 模板
- Pyramid - HTML 表单模板
- Python Pyramid - 静态资源
- Python Pyramid - 请求对象
- Python Pyramid - 响应对象
- Python Pyramid - 会话
- Python Pyramid - 事件
- Python Pyramid - 消息闪烁
- Pyramid - 使用 SQLAlchemy
- Python Pyramid - Cookiecutter
- Python Pyramid - 创建项目
- Python Pyramid - 项目结构
- Python Pyramid - 包结构
- 手动创建项目
- 命令行Pyramid
- Python Pyramid - 测试
- Python Pyramid - 日志记录
- Python Pyramid - 安全
- Python Pyramid - 部署
- Python Pyramid有用资源
- Python Pyramid - 快速指南
- Python Pyramid - 有用的资源
- Python Pyramid - 讨论
Python Pyramid - 命令行Pyramid
Pyramid 库有一个脚本子包,它包含许多可用于控制和检查 Pyramid 应用程序的 Python 脚本。这些模块既可以用作可导入模块,也可以在命令提示符下使用。因此,它们通常被称为命令行脚本。
这些命令行脚本是 -
pserve - 提供使用 PasteDeploy 配置文件的 Web 应用程序。
pviews - 显示给定 URL 的匹配视图。
pshell - 交互式外壳。
proutes - 显示所有应用程序路由。
ptweens - 显示“补间”。
prequest - 调用请求。
pdistreport - 显示所有已安装的发行版及其版本。
所有这些命令行脚本都使用 PasteDeploy 配置文件 (development.ini)。
保存
这是最重要的脚本。在“development.ini”[app:main] 部分中配置的 Pyramid 应用程序在所选服务器(Waitress)和提到的主机和端口(localhost:6543)的帮助下提供服务。
假设 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
为了使pserve实用程序更加灵活,可以使用以下命令行参数 -
config_uri - 配置文件的 URI。
-n <name> - 加载指定的应用程序(默认主应用程序)。
-s <server_type> - 使用指定的服务器。
--server-name <section_name> - 使用配置文件中定义的命名服务器(默认值:main)
--reload - 使用自动重新启动文件监视器。
-b - 打开网络浏览器访问服务器 URL。
该应用程序在http://localhost:6543上提供服务,在这种情况下,访问受到限制,只能在同一台计算机上运行浏览器。如果你想让其他机器在同一网络上,那么编辑“development.ini”文件,并替换[server:main]部分中的listen值,如下所示 -
[server:main] use = egg:waitress#main listen = *:6543
设置 *:6543 相当于 0.0.0.0:6543 [::]:6543,因此,应用程序响应系统拥有的所有 IP 地址上的请求,而不仅仅是对本地主机的请求。
无论何时修改正在运行的代码, pserve命令行中的 --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命令行脚本用于在命令终端窗口中打印给定 URL 的匹配路由和视图的摘要。pviews命令接受两个参数。第一个参数是应用程序的“.ini”文件的路径和其中的节名称。其格式应为config_file#section_name(默认值为 main)。第二个参数是用于测试匹配视图的 URL。
让我们使用之前用 Cookiecutter 构建的 testproj 项目中的development.ini 文件来执行 pview 命令。
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 脚本使得可以通过 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 提示符中检查它们的Behave。
>>> 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”数据库中找到一个模型表,其中有一条记录。
我们现在从 Python 提示符访问该表,如下所示 -
>>> m=models.MyModel >>> obj=dbsession.query(m).get(1) >>> obj <testproj.models.mymodel.MyModel object at 0x0000020E9FD96DA0> >>> obj.name 'one'
让我们在模型表中添加一个新行。首先声明一个MyModel类的对象,并将其添加到dbsession中。
>>> tm.begin() >>> obj=models.MyModel(id=2, name='two', value=2) >>> dbsession.add(obj) >>> tm.commit()
Pyramid 使用交易管理器对象 tm,该对象在Pyramid_tm包中声明。要确认是否添加了新记录,请将其检索回来。
>>> obj=dbsession.query(models.MyModel).get(2) >>> obj.name 'two'
这也可以通过在 SQLite GUI 工具中实际查看数据库的模型表来确认。
前提条件
prequest 实用程序允许您测试 URL 模式的响应,而无需实际启动服务器。该命令需要配置文件和 URL 路径作为命令行参数。例如 -
Env>prequest development.ini /
该命令生成我们之前看到的 Cookiecutter 主页的原始 HTML 响应。
有几个可以使用的命令行开关。-d 选项显示服务器返回的状态和标头。要覆盖默认的 GET 请求方法,我们可以使用 -m 选项。
普鲁特斯
此命令行 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/