金字塔(Python的Web框架)笔记
开始了Pyramid。所以,做了一些设置笔记。
设置网址的URL
基础路线的使用方法配置的配置
if __name__ == '__main__':
with Configurator() as config:
config.add_route('ルートの名前', 'urlの指定') # ルートの追加
config.scan() # 確定
if __name__ == '__main__':
with Configurator() as config:
config.add_route('ルートの名前', 'urlの指定') # ルートの追加
config.scan() # 確定
被调用的函数
@view_config(route_name='ルートの名前', renderer='json')
def 適当な関数名(request):
処理
return {} # rendererにjsonを設定しておくとオブジェクトがそのまま返せる
API的路由使用方法在配置config时,可以使用{}来设置参数的接收。常见的例子是当访问/users/user_id/login时,需要接收user_id和login这两部分数据。
if __name__ == '__main__':
with Configurator() as config:
config.add_route('ルートの名前', '/users/{id}{func:.*}')
config.scan() # 確定
if __name__ == '__main__':
with Configurator() as config:
config.add_route('ルートの名前', '/users/{id}{func:.*}')
config.scan() # 確定
作为备用。将user_id部分设置为id,将/login设置为func。在调用函数的一侧,可以引用request对象的matchdict来获取值。
@view_config(route_name='ルートの名前', renderer='json')
def 適当な関数名(request):
if(request.matchdict["func"] == "/login"):
/users/user_id/loginのuser_idの部分で指定されてたユーザーのログイン処理を行う
user_idはurlの{id}という設定により、request.matchdict["id"]に格納されている
elif(request.matchdict["func"] == ""):
url呼び出し時に/users/user_idとした場合funcが空なので、例えばRESTであればGETの処理を行う
return {} # rendererにjsonを設定しておくとオブジェクトがそのまま返せる
我想将带有@view_config修饰的函数(route调用的函数)放在另一个模块中。
在一个包含函数的模块中调用config.scan()。
但是太麻烦了,可能会把模块内的@view_config去掉,并在主模块中这样写(:3」∠)
# const/const_map.py内のconst_map関数を呼び出す
sys.path.append("const")
from const_map import *
@view_config(route_name='const_map', renderer='json')
def call_const_map(request):
return const_map(request)
静态文件分发具有用于调试的静态文件传送功能。
if __name__ == '__main__':
with Configurator() as config:
config.add_static_view(name='アクセスURL', path='公開するディレクトリ指定。相対パスも可')
pyramid-mongoengine的使用方法
config的设置如果没有使用pcreate且没有ini文件(只有一个文件启动的情况),即使阅读了手册也只写了要在ini中进行设置,我应该怎么办呢? 请将mongo_url和mongodb_name设置到config中即可。
if __name__ == '__main__':
with Configurator() as config:
config.add_settings({
"mongo_url": "mongodb://ホストのurl[:ポート(省略可)]",
"mongodb_name": "使用するDB名",
})
config.include("pyramid_mongoengine")
config.add_connection_database()
用法
收藏访问类在创建 MogoEngine 的实例并利用它构建类之前,请确保将类名与 mongodb 集合名称对应起来,不要随意命名。例如,如果将类名命名为 UserEvent,则可以访问名为 user_event 的集合。
if __name__ == '__main__':
with Configurator() as config:
config.add_static_view(name='アクセスURL', path='公開するディレクトリ指定。相対パスも可')
config的设置如果没有使用pcreate且没有ini文件(只有一个文件启动的情况),即使阅读了手册也只写了要在ini中进行设置,我应该怎么办呢? 请将mongo_url和mongodb_name设置到config中即可。
if __name__ == '__main__':
with Configurator() as config:
config.add_settings({
"mongo_url": "mongodb://ホストのurl[:ポート(省略可)]",
"mongodb_name": "使用するDB名",
})
config.include("pyramid_mongoengine")
config.add_connection_database()
用法
收藏访问类在创建 MogoEngine 的实例并利用它构建类之前,请确保将类名与 mongodb 集合名称对应起来,不要随意命名。例如,如果将类名命名为 UserEvent,则可以访问名为 user_event 的集合。
if __name__ == '__main__':
with Configurator() as config:
config.add_settings({
"mongo_url": "mongodb://ホストのurl[:ポート(省略可)]",
"mongodb_name": "使用するDB名",
})
config.include("pyramid_mongoengine")
config.add_connection_database()
收藏访问类在创建 MogoEngine 的实例并利用它构建类之前,请确保将类名与 mongodb 集合名称对应起来,不要随意命名。例如,如果将类名命名为 UserEvent,则可以访问名为 user_event 的集合。
字段的类型用于验证。类型的列表在这里:http://docs.mongoengine.org/guide/defining-documents.html#fields。
db = MongoEngine()
class クラス名(db.Document):
フィールド名 = db.フィールドの型(required=True)
使用方法使用する場合、ドット記法でドキュメントのフィールドにアクセスしますが、MongoEngineではドット記法ではなくPythonの属性アクセス記法を使用します。
注意事项:MongoEngine与原始的MongoDB语法略有差异。例如,当使用MongoDB时,我们使用点符号表示法来访问文档字段,而在MongoEngine中,我们使用Python的属性访问符号而不是点符号。
.update({"$set": {"value": value}})
在MongoEngine中,如果要更新值,可以这样做。
.update(set__value=value)
有些人把”と$set”写作”set__”。
查询
要获取收藏列表,
コレクション用クラス.objects(フィルタ)
コレクション用クラス.objects(フィルタ)
如果有这样做的话,将返回一个用于集合的类的实例列表(游标)。如果在renderer中指定了json,那么可以直接返回这个游标。
只需要选择一个
.first()
使用它,可以获取集合类的实例,可以通过return发送给客户端、进行处理并进行.save(),还可以执行集合类中编写的方法。如果结果列表为空,则返回None。
将JSON对象转化为字符串形式以下是查询结果
.to_json()
.to_json()
所以,可以获取JSON字符串。这在调试时使用print()非常方便。
从接收到的数据中排除_id请用中文提供查询结果。
.exclude("id")
.exclude("id")
给予。
会议
饼干
# import
from pyramid.session import SignedCookieSessionFactory
# config設定
session_factory = SignedCookieSessionFactory('シークレット文字列')
config.set_session_factory(session_factory)
# import
from pyramid.session import SignedCookieSessionFactory
# config設定
session_factory = SignedCookieSessionFactory('シークレット文字列')
config.set_session_factory(session_factory)
如果已经设置,将出现在响应头中。
Set-Cookie: session=文字列;
但通常不会使用Cookie会话等设置。
金字塔烧杯只使用Cookie来传输会话ID,并且服务器持有实体,这个库非常方便。如果设置了,会在响应头中有说明。
Set-Cookie: beaker.session.id=文字列;
Set-Cookie: beaker.session.id=文字列;
设定。
记忆会话就个人而言,我喜欢无后顾之忧的内存会话。嗯,实际运行时内存是宝贵的,所以这只适用于开发时专用。
config.add_settings({
"session.type": "memory",
"session.cookie_expires": True,
})
config.include('pyramid_beaker')
MongoDB会话将会话信息保存在MongoDB中。在指定的数据库中创建一个名为backer_cache的集合,并将数据保存在那里。用于实际操作目的。
config.add_settings({
"session.type": "memory",
"session.cookie_expires": True,
})
config.include('pyramid_beaker')
如果想要快速处理的话,可以使用 ext:memcached 等方式。
config.add_settings({
'session.type': 'ext:mongodb',
'session.url': 'mongodb://ホスト名:ポート名/DB名',
})
config.include('pyramid_beaker')
输入输出在路由器中调用的函数的请求对象的会话进行读写。
request.session["名前"] = 値
request.session["名前"] = 値