金字塔(Python的Web框架)笔记

开始了Pyramid。所以,做了一些设置笔记。

设置网址的URL

基础路线的使用方法配置的配置

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()  # 確定

作为备用。将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 的集合。

字段的类型用于验证。类型的列表在这里: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(フィルタ)

如果有这样做的话,将返回一个用于集合的类的实例列表(游标)。如果在renderer中指定了json,那么可以直接返回这个游标。

只需要选择一个

.first()

使用它,可以获取集合类的实例,可以通过return发送给客户端、进行处理并进行.save(),还可以执行集合类中编写的方法。如果结果列表为空,则返回None。

将JSON对象转化为字符串形式以下是查询结果

.to_json()

所以,可以获取JSON字符串。这在调试时使用print()非常方便。

从接收到的数据中排除_id请用中文提供查询结果。

.exclude("id")

给予。

会议

饼干

# 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=文字列;

设定。

记忆会话就个人而言,我喜欢无后顾之忧的内存会话。嗯,实际运行时内存是宝贵的,所以这只适用于开发时专用。

config.add_settings({
    "session.type": "memory",
    "session.cookie_expires": True,
})
config.include('pyramid_beaker')

MongoDB会话将会话信息保存在MongoDB中。在指定的数据库中创建一个名为backer_cache的集合,并将数据保存在那里。用于实际操作目的。

如果想要快速处理的话,可以使用 ext:memcached 等方式。

config.add_settings({
    'session.type': 'ext:mongodb',
    'session.url': 'mongodb://ホスト名:ポート名/DB名',
})
config.include('pyramid_beaker')

输入输出在路由器中调用的函数的请求对象的会话进行读写。

request.session["名前"] = 

bannerAds