金字塔的一般用户注册
horus的Python项目详细描述
horus提供金字塔web框架的通用用户注册, 如果你的web应用使用sqlalchemy。
它是一个可插入的web应用程序,提供用户注册, 登录、注销和更改密码功能。horus遵循 最小的干扰,所以你的应用程序可以保留现有的模型。
最小积分
创建一个virtualenv并激活它。安装金字塔并创建 你的金字塔计划。
编辑setup.py以将“horus”添加到 install需要列表。
对项目运行python setup.py develop以安装所有依赖项 进入你的虚拟世界。
创建sqlalchemy声明性初始化。
创建继承自horus抽象模型的模型。在 文件horus/tests/models.py。
或者,使用horus scaffold脚本:
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')
配置horus.login_redirect和horus.logout_redirect (在.ini配置文件中)设置重定向路由。
如果您还没有这样做,请根据 金字塔文件的会话章节。
创建数据库和表。甚至可能是初始用户。
请确保在 config = Configurator(...)调用。有关详细信息,请参阅金字塔文档。
现在登录表单应该出现在/login,但是/register不应该出现。
包括用于验证电子邮件和 “忘记密码”电子邮件:
config.include('pyramid_mailer')
/register表单应该出现,尽管很难看。现在你有选择了 关于通过电子邮件激活用户:
您可以通过在.ini文件中设置来禁用它:
horus.require_activation = False
否则,请配置棱锥体邮件程序according to its documentation 并测试注册页。
如果您使用的是pyramidTM或zopetransactionmanager,那么 集成完成。(书页很难看,但很有用。继续阅读…
需要session.commit()?
horus不需要在 但如果你不使用它们,你必须采取一个额外的步骤。 我们不会为你提交交易,因为那不好!
您只需订阅扩展事件和 亲自提交会话。这也给了你机会 做一些额外的处理:
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)
更改表单
如果你想修改任何一个表单,你只需要 注册要使用的新变形类。
可以从horus覆盖的接口有:
- ihorusloginform
- ihorusregisterform
- ihorusforgotpasswordform
- ihorusresetpasswordform
- ihorusprofileform
这样做(myform是一个自定义的deform form类):
config.registry.registerUtility(MyForm, IHorusLoginForm)
更改模板
如果要替换模板,可以使用棱锥体的 override_asset:
config.override_asset(to_override='horus:templates/template.mako', override_with='your_package:templates/anothertemplate.mako')
您可以覆盖的模板有:
- login.mako
- register.mako
- 忘记密码.mako
- 重置密码.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')
更改字符串
看看this class。 我们把所有的弦都放在这里。 如果要更改一条或两条消息,只需将其子类化,然后执行:
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
霍勒斯发展
见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