Pyramid的通用用户注册
项目描述
horus 为Pyramid Web框架提供通用用户注册,如果您的Web应用使用sqlalchemy。
它是一个可插拔的Web应用程序,提供用户注册、登录、登出和更改密码功能。horus 遵循最小干扰原则,因此您的应用可以保持现有的模型。
最小集成
创建一个virtualenv并激活它。安装pyramid并创建您的pyramid项目。
编辑您的 setup.py 以将“horus”添加到 install_requires 列表中的依赖项。
在您的项目上运行 python setup.py develop 以将所有依赖项安装到您的virtualenv中。
创建您的SQLAlchemy声明初始化。
创建从horus的抽象模型继承的模型。在文件 horus/tests/models.py 中找到一个示例。
或者,使用horus脚手架脚本
horus_scaffold development.ini > your_app/auth_models.py
然后您只需告诉类在哪里找到您的声明基类,就可以开始了!
像这样在 main() 函数中包含horus
# Tell horus which SQLAlchemy scoped session to use: from hem.interfaces import IDBSession registry = config.registry registry.registerUtility(my_sqlalchemy_scoped_session, IDBSession) config.include('horus') config.scan_horus(auth_models_package_or_module)
使用上述 config.scan_horus() 调用,您需要编辑您的 .ini 配置文件,并告诉 horus 使用哪些模型类,如下所示
horus.user_class = my_app.models:User horus.activation_class = my_app.models:Activation
作为对 config.scan_horus() 以及该配置的替代方案,如果您愿意,可以显式注册这些类。这必须在 config.include('horus') 之上完成
# Tell horus which models to use: from horus.interfaces import IUserClass, IActivationClass registry.registerUtility(User, IUserClass) registry.registerUtility(Activation, IActivationClass) config.include('horus')
在您的 .ini 配置文件中配置 horus.login_redirect 和 horus.logout_redirect 以设置重定向路由。
如果您尚未这样做,请根据 Pyramid 文档中的 Sessions 章节配置 HTTP 会话工厂。
创建您的数据库和表。也许甚至一个初始用户。
确保在 config = Configurator(...) 调用中传递 authentication_policy 参数。有关详细信息,请参阅 Pyramid 文档。
现在登录表单应该出现在 /login,但 /register 不应该。
包含 pyramid_mailer 包以用于验证电子邮件和“忘记密码”电子邮件。
config.include('pyramid_mailer')
/register 表单应该出现,尽管外观丑陋。现在您有关于通过电子邮件激活用户的选择。
您只需在您的 .ini 文件中设置即可禁用它
horus.require_activation = False
否则,根据其文档配置 pyramid_mailer 并测试注册页面。
如果您正在使用 pyramid_tm 或 ZopeTransactionManager,您的基本集成已完成。(页面看起来很丑,但正在工作。继续阅读…)
需要 session.commit() 吗?
horus 不需要 pyramid_tm 或 ZopeTransactionManager 与您的会话,但如果没有使用它们,您就必须多走一步。我们不为您提交事务,因为这真的不太好!
您所要做的就是订阅扩展事件,并自己提交会话。这也给了您进行一些额外处理的机会。
from horus.events import ( PasswordResetEvent, NewRegistrationEvent, RegistrationActivatedEvent, ProfileUpdatedEvent) def handle_request(event): request = event.request session = request.registry.getUtility(IDBSession) session.commit() self.config.add_subscriber(handle_request, PasswordResetEvent) self.config.add_subscriber(handle_request, NewRegistrationEvent) self.config.add_subscriber(handle_request, RegistrationActivatedEvent) self.config.add_subscriber(handle_request, ProfileUpdatedEvent)
修改表单
如果您想修改任何表单,只需注册要使用的新 deform 类。
您可以覆盖 horus.interfaces 的接口有
IHorusLoginForm
IHorusRegisterForm
IHorusForgotPasswordForm
IHorusResetPasswordForm
IHorusProfileForm
这是您如何做到的(MyForm 是一个自定义 deform 表单类)
config.registry.registerUtility(MyForm, IHorusLoginForm)
修改模板
如果您想替换模板,可以使用 pyramid 的 override_asset
config.override_asset(to_override='horus:templates/template.mako', override_with='your_package:templates/anothertemplate.mako')
您可以覆盖的模板有
login.mako
register.mako
forgot_password.mako
reset_password.mako
profile.mako
如果您想用 Jinja2 或任何其他模板语言覆盖模板,只需覆盖视图配置
config.add_view('horus.views.AuthController', attr='login', route_name='login', renderer='yourapp:templates/login.jinja2') config.add_view('horus.views.ForgotPasswordController', attr='forgot_password', route_name='forgot_password', renderer='yourapp:templates/forgot_password.jinja2') config.add_view('horus.views.ForgotPasswordController', attr='reset_password', route_name='reset_password', renderer='yourapp:templates/reset_password.jinja2') config.add_view('horus.views.RegisterController', attr='register', route_name='register', renderer='yourapp:templates/register.jinja2') config.add_view('horus.views.ProfileController', attr='profile', route_name='profile', renderer='yourapp:templates/profile.jinja2')
修改字符串
看看 这个类。这是我们在 horus 中存储所有字符串的地方。如果您想更改一条或两条消息,只需创建这个类的子类,然后做
from horus.interfaces import IUIStrings config.registry.registerUtility(MyStringsClass, IUIStrings)
修改主键列名
如果您想覆盖主键属性名称,可以通过创建一个新的 mixin 类来实现
class NullPkMixin(Base): abstract = True _idAttribute = 'pk' @declared_attr def pk(self): return Base.pk @declared_attr def id(self): return None class User(NullPkMixin, UserMixin): pass
horus 开发
见 https://github.com/eventray/horus
如果您想帮助修改 horus,可以使用 py.test 运行其单元测试
py.test
检查测试覆盖率
py.test --cov-report term-missing --cov horus
测试也可以并行运行
py.test -n4
我们正在使用这个构建服务器: http://travis-ci.org/#!/eventray/horus
项目详情
horus-0.9.15.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1e6f54e0a928b8d0d2ebfc6906fe35d7263013df0ef510fac2db3709ef410d3b |
|
MD5 | edf5cd14f82ade0d1e76b339643178e4 |
|
BLAKE2b-256 | cb1e5919cfd9604544f9b8a8bf1e90d034241cc13e513fb79004bd6b95b32c65 |