金字塔的一般用户注册

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_redirecthorus.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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Java中使用BufferedReader类读取文本文件的子字符串   java如何在JSP页面上包含来自另一台服务器的动态JSP   使用单表策略的java持久化Hibernate继承映射   java报告状态失败达600秒。谋杀!报告hadoop的进展   java将字符串解析为形状   使用JTable的java ClassCastException?   java在Spring引导中关闭数据库   java Android Studio调试错误(Ubuntu)   java如何区分apache beam中KV实例中的两个键?   java将RealmObjectChangeListener添加到异步下载的RealmObject   java匹配模式之前的所有内容,包括新行和/或回车   java使用JAXB在XML中动态更改元素序列   java如何在MACOS中找到动态库(.dylib文件)的版本   Android中的java Nanohttpd服务器   java libGDX:3d动画不工作