在flasksecurity中扩展RegisterForm时出错

2024-06-18 17:48:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我在扩展flask security的注册权限时遇到了困难。在

我已经扩展了注册表:

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)并直接指向我自己的注册页。在

当它正在验证fine时,我得到以下错误:

^{pr2}$

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

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


Tags: no用户id角色dbstringpositioncolumn
1条回答
网友
1楼 · 发布于 2024-06-18 17:48:33

解决办法很简单。 我导入了所有必需的注册组件,并调用了以下函数,将表单传递给它。 因为我有多个帐户(因为应用程序充当多个站点的后端),所以我还向它传递一个account_id integer,这样用户就可以与正确的帐户相关联了。在

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)  

粘贴在这里是希望它能对试图解构flask安全性的用户注册组件的人有用

相关问题 更多 >