Pyramid 命令行Pyramid

2023-03-30 17:56 更新

Pyramid庫有一個(gè) 腳本 子包,它包含了一些Python腳本,可用于控制和檢查Pyramid應(yīng)用程序。這些模塊既可以作為一個(gè)可導(dǎo)入的模塊使用,也可以從命令提示符中使用。因此,它們通常被稱為命令行腳本。

這些命令行腳本是–

  • pserve – 為使用PasteDeploy配置文件的Web應(yīng)用程序服務(wù)。
  • pviews – 顯示給定URL的匹配視圖。
  • pshell – 交互式外殼。
  • proutes – 顯示所有應(yīng)用程序的路由。
  • ptweens – 顯示 “Tweens”。
  • prequest – 調(diào)用一個(gè)請(qǐng)求。
  • pdistreport – 顯示所有已安裝的發(fā)行版和它們的版本。

所有這些命令行腳本都使用PasteDeploy的配置文件(development.ini)。

pserve

這是最重要的腳本。在 “development.ini”[app:main]部分配置的Pyramid應(yīng)用程序在所選擇的服務(wù)器(Waitress)和提到的主機(jī)和端口(localhost:6543)的幫助下被提供。

假設(shè)Pyramid項(xiàng)目(testproj)是在Pyramid虛擬環(huán)境中的同名文件夾中創(chuàng)建的,下面的命令開始監(jiān)聽傳入的瀏覽器請(qǐng)求—-。

Env>..\scripts\pserve development.ini

pserve 模塊(以及其他Pyramid命令行腳本)可以作為Python解釋器的一個(gè)參數(shù)在命令提示符下運(yùn)行。

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 工具更加靈活,可以使用以下命令行參數(shù) –

  • config_uri – 配置文件的URI。
  • -n <name> - 加載指定的應(yīng)用程序(默認(rèn)為main)。
  • **-s - **使用命名的服務(wù)器。
  • **--server-name - **使用配置文件中定義的命名的服務(wù)器(默認(rèn):main
  • --reload — 使用自動(dòng)重啟文件監(jiān)視器。
  • -- b — 打開一個(gè)網(wǎng)頁瀏覽器到服務(wù)器的網(wǎng)址。

該應(yīng)用程序在 http://localhost:6543 ,在這種情況下,訪問被限制,只有在同一臺(tái)機(jī)器上運(yùn)行的瀏覽器。如果你想讓其他機(jī)器在同一網(wǎng)絡(luò)上運(yùn)行,那么編輯 “development.ini “文件,并替換[server:main]部分的listen值,如下所示

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

設(shè)置*:6543相當(dāng)于0.0.0.0:6543 [:]:6543,因此,應(yīng)用程序會(huì)對(duì)你的系統(tǒng)所擁有的所有IP地址的請(qǐng)求做出響應(yīng),而不僅僅是對(duì)localhost的請(qǐng)求。

pserve 命令行中的–reload選項(xiàng)使應(yīng)用程序在運(yùn)行代碼被修改時(shí)自動(dòng)被重新加載。

用 --reload選項(xiàng) 啟動(dòng)應(yīng)用程序。

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

如果對(duì)項(xiàng)目的.py文件或.ini文件做了任何改變,服務(wù)器會(huì)自動(dòng)重啟:

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 命令行腳本在命令終端窗口中用來打印一個(gè)給定URL的匹配路由和視圖的摘要。 pviews 命令接受兩個(gè)參數(shù)。第一個(gè)參數(shù)是你的應(yīng)用程序的”.ini “文件的路徑和其中的章節(jié)名稱。這個(gè)參數(shù)的格式應(yīng)該是 config_file#section_name (默認(rèn)值是main)。第二個(gè)參數(shù)是用于測試匹配視圖的URL。

讓我們用Cookiecutter建立的testproj項(xiàng)目中的development.ini文件來測試views命令。

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

輸出結(jié)果在頂部顯示了請(qǐng)求的URL,下面顯示了所有匹配的視圖和它們的視圖配置細(xì)節(jié)。在這個(gè)例子中,只有一個(gè)視圖匹配,所以只有一個(gè)視圖部分。

pshell

pshell腳本使得在Python提示下與Pyramid應(yīng)用程序的環(huán)境進(jìn)行交互成為可能。這個(gè)shell使用PasteDeploy的配置文件,即development.ini作為命令行參數(shù)(像其他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`.

>>>

腳本讀取配置,其中聲明的對(duì)象作為Python對(duì)象可用來進(jìn)行交互。我們可以從Python提示符中檢查它們的行為。

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

注冊表設(shè)置從 “development.ini “中讀入一個(gè)字典。我們可以使用for循環(huán)來遍歷它的內(nèi)容 —

>>> 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模型與數(shù)據(jù)庫進(jìn)行交互。

當(dāng)我們第一次完成cookiecutter的步驟時(shí),應(yīng)用程序的數(shù)據(jù)庫在一開始就被初始化。我們在 “testproj.sqlite “數(shù)據(jù)庫中找到一個(gè)模型表,里面有一條記錄。

Python Pyramid - 命令行Pyramid

現(xiàn)在我們從Python提示符中訪問這個(gè)表,如下所示

>>> m=models.MyModel

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

讓我們在模型表中添加一條新的行。首先聲明一個(gè)MyModel類的對(duì)象,并在dbsession中添加它。

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

Pyramid使用一個(gè)在 pyramid_tm 包中聲明的事務(wù)管理器對(duì)象tm。為了確認(rèn)一個(gè)新的記錄被添加,將其檢索回來。

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

這也可以通過在SQLite GUI工具中實(shí)際查看數(shù)據(jù)庫的模型表來確認(rèn)。

Python Pyramid - 命令行Pyramid

prequest

prequest工具讓你在不實(shí)際啟動(dòng)服務(wù)器的情況下測試一個(gè)URL模式的響應(yīng)。該命令需要配置文件和URL路徑作為命令行參數(shù)。例如 –

Env>prequest development.ini /

該命令產(chǎn)生了我們前面看到的Cookiecutter主頁的原始HTML響應(yīng)。

有幾個(gè)命令行開關(guān)可以使用。-d選項(xiàng)顯示服務(wù)器返回的狀態(tài)和頭文件。要覆蓋默認(rèn)的GET請(qǐng)求方式,我們可以使用-m選項(xiàng)。

腳本

這個(gè)命令行Pyramid腳本顯示所有添加到你的應(yīng)用程序注冊表的路由。它只接受一個(gè)參數(shù),即配置文件(development.ini)。

以下是testproj包的路由配置,由proutes命令顯示 –

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/


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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)