在烧瓶安全中扩展注册表单时出错



我在扩展烧瓶安全的注册参数时遇到困难。

我已经扩展了注册表格:

class ExtendedRegisterForm(RegisterForm):
    payroll_no = IntegerField('Payroll Number', validators=[DataRequired(message=(u'Please include a payroll number'))])
    firstname = TextField('First Name')
    surname = TextField('Surname')
    position = QuerySelectField(u'Position', query_factory=getPosition, get_label='name', allow_blank=False)
    mobile = TextField('Mobile', [InputRequired(), is_10])

我正在尝试从视图调用register_user()(我已禁用SECURITY_REGISTERABLE)并直接转到我自己的注册页面。

虽然验证正常,但我收到以下错误:

TypeError: "register_user() got an unexpected keyword argument 'surname'"
我的

用户模型与我的表单匹配:

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(80), unique=True)
    password = db.Column(db.String)
    active = db.Column(db.Boolean())
    confirmed_at = db.Column(db.DateTime())
    firstname = db.Column(db.String(20))
    surname = db.Column(db.String(30))
    position_id = db.Column(db.Integer, db.ForeignKey('position.id'))
    mobile = db.Column(db.String)
    payroll_no = db.Column(db.Integer)

最感谢的帮助。

不幸的是,答案(我相当确定)不会在于迁移到上下文处理器或其他解决方案:我的项目有多个"启动"页面,我需要一种方法根据用户进入注册页面的方式为该用户设置特定角色;即。找到站点 A 的用户需要角色 A,找到站点 B 的用户需要角色 B。

解决方案非常简单。我导入了所有必要的注册组件并调用了以下函数,并向其传递表单。由于我有多个帐户(因为该应用程序充当多个站点的后端),因此我还向它传递了一个account_id整数,以便用户与正确的帐户相关联。

from project import app, db, security, user_datastore
from project.models import User
from flask.ext.security.confirmable import generate_confirmation_link
from flask.ext.security.utils import do_flash, get_message, config_value, send_mail, encrypt_password
from flask.ext.security.signals import user_registered
from flask import current_app

def register_my_user(form, account_id):
    form_data = form.to_dict()
    form_data['password']=encrypt_password(form_data['password'])
    user = user_datastore.create_user(**form_data)
    user.account_id = account_id
    db.session.commit()
    confirmation_link, token = generate_confirmation_link(user)
    do_flash(*get_message('CONFIRM_REGISTRATION', email=user.email))
    user_registered.send(current_app._get_current_object(),
                     user=user, confirm_token=token)
    if config_value('SEND_REGISTER_EMAIL'):
        send_mail(config_value('EMAIL_SUBJECT_REGISTER'), user.email, 'welcome',
              user=user, confirmation_link=confirmation_link)  

粘贴在这里,希望它对试图解构烧瓶安全的用户注册组件的人有用

最新更新