微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么来自输入的数据没有进入数据库烧瓶安全

如何解决为什么来自输入的数据没有进入数据库烧瓶安全

我使用了flask-security,想在注册页面添加额外的字段。
我试图按照 documentation

中所写的去做

字段已添加,但其中的数据未发送到数据库。 我还了解到,如果应用程序添加新字段是不可能的。 config ['Security_CONFIRMABLE'] = True。 我在终端中没有错误。发送电子邮件后,我得到以下信息。

回复:b'221 2.0.0 关闭连接 z17sm242899lfe.135 - gsmtp\r\n'
回复: retcode (221);消息:b'2.0.0 关闭连接 z17sm242899lfe.135 - gsmtp'
127.0.0.1 - - [27/Jan/2021 08:49:21] "POST /register HTTP/1.1" 302 -
127.0.0.1 - - [27/Jan/2021 08:49:21] "GET / HTTP/1.1" 200 -

我做错了什么? 为什么输入的数据没有进入数据库

app.py

app = Flask(__name__)
babel = Babel(app,'ru')


app.config['sqlALCHEMY_DATABASE_URI'] = 'postgresql://postgres:123@localhost/platform'
app.config['SECRET_KEY'] = 'super-secret'
app.config['Security_REGISteraBLE'] = True
app.config['Security_PASSWORD_HASH'] = 'bcrypt'
app.config['Security_PASSWORD_SALT'] = 'salt'
app.config['DEBUG'] = True

app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = 'mail'
app.config['MAIL_PASSWORD'] = 'pass'
app.config['MAIL_USE_SSL'] = True
app.config['Security_EMAIL_SENDER'] = 'mail'
app.config['Security_CONFIRMABLE'] = False
app.config['Security_RECOVERABLE'] = True
app.config['Security_CHANGEABLE'] = True
app.config['Security_REGISteraBLE'] = True
app.config['sqlALCHEMY_TRACK_MODIFICATIONS'] = True
app.config['Security_REGISTER_USER_TEMPLATE'] = 'security/register_user.html'
mail = Mail(app)
db = sqlAlchemy(app)
admin = Admin(app)

#  models
roles_users = db.Table('roles_users',db.Column('user_id',db.Integer(),db.ForeignKey('user.id')),db.Column('role_id',db.ForeignKey('role.id')))


class Role(db.Model,RoleMixin):
    id = db.Column(db.Integer(),primary_key=True)
    name = db.Column(db.String(80),unique=True)


class User(db.Model,UserMixin):
    id = db.Column(db.Integer,primary_key=True)
    email = db.Column(db.String(255),unique=True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean())
    confirmed_at = db.Column(db.DateTime())
    fistName = db.Column(db.String(80))
    lastName = db.Column(db.String(80))
    roles = db.relationship('Role',secondary=roles_users,backref=db.backref('users',lazy='dynamic'))




class ExtendedRegisterForm(RegisterForm):
    first_name = StringField('First Name',[required()])
    last_name = StringField('Last Name',[required()])


# Setup Flask-Security
user_datastore = sqlAlchemyUserDatastore(db,User,Role)

security = Security(app,user_datastore,register_form=ExtendedRegisterForm)



@app.route('/')
@login_required
def index():
    return render_template('index.html')

security/register_user.html

{% from "security/_macros.html" import render_field_with_errors,render_field %}
{% include "security/_messages.html" %}
<h1> Регистрация </h1>
<form action="{{ url_for_security('register') }}" method="POST" name="register_user_form">
    {{ register_user_form.hidden_tag() }}
    {{ render_field_with_errors(register_user_form.email) }}
    {{ render_field_with_errors(register_user_form.password) }}
    {% if register_user_form.password_confirm %}

        {{ render_field_with_errors(register_user_form.password_confirm) }}

    {% endif %}
    {{ render_field(register_user_form.first_name) }}

    {{ render_field(register_user_form.last_name) }}
    {{ render_field(register_user_form.submit) }}
</form>
{% include "security/_menu.html" %}

解决方法

首先 - 我知道这很令人困惑 - 如果 CONFIRMABLE=True 您需要将您的表单基于 ConfirmRegisterForm()。 至于没有进入数据库的数据 - 您的表单字段名称和数据库列名称必须匹配!所以 first_name 和 last_name 应该是你的数据库列名...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?