Flask-Security user_registered 信号在 Python 3.3 中未收到,但在 2.7 中有效

2023-12-28

我正在尝试使用 user_registered 信号,以便在用户使用 Flask-security 注册时为用户设置默认角色,如下链接所示:在 Flask 安全性中设置默认角色 https://stackoverflow.com/questions/17146724/setting-a-default-role-in-flask-security

在我的搜索中,我可以看到 Flask-security 中已经解决了一个错误:没有收到来自烧瓶安全的信号 https://stackoverflow.com/questions/15060849/not-getting-signal-from-flask-security, 修复-user_registered信号问题 https://github.com/mattupstate/flask-security/issues/94

我尝试了以下方法来证明处理程序是否收到信号,但没有任何运气:

@user_registered.connect_via(app)
def user_registered_sighandler(sender, **extra):
    print("print-user_registered_sighandler:", extra)

然而,即使用户注册并且应该发送信号,它也永远不会被调用。

如果有帮助,我已将烧瓶安全配置设置如下:

app.config['SECURITY_REGISTERABLE'] = True
app.config['SECURITY_CONFIRMABLE'] = False
app.config['SECURITY_SEND_REGISTER_EMAIL'] = False
app.config['SECURITY_CHANGEABLE'] = True
app.config['SECURITY_SEND_PASSWORD_CHANGE_EMAIL'] = False

来自 Flask-Login 和 Flask-Principal 的信号对我有用,因为我设法确认发送信号时成功打印以下代码片段:

@user_logged_out.connect_via(app)
def on_user_logged_out(sender, user):
    print('USER LOG OUT: made it in',user)

@identity_changed.connect_via(app)
def identity_changed_ok(sender,identity):
    print('Identity changed:',identity)

对于我的设置,我使用 python 3.3 (anaconda) 并使用以下内容: Flask==0.10.1,flask-login==0.2.11,flask-principal==0.4.0,flask-security==1.7.4,blinker==1.3。查看了烧瓶登录和烧瓶安全中的信号后,我不确定为什么烧瓶安全信号不起作用。

EDIT:

如果我添加print(user_registered.receivers)到我的应用程序中的路线,它将显示我有一个接收器:{139923381372400: <function user_registered_sighandler at 0x7f42737145f0>}。如果我将相同的打印语句放在flask-security的registerable.py中,就在user_registered.send(app._get_current_object(),user=user, confirm_token=token)然后它没有列出接收者:{}

EDIT2:

问题似乎与使用 python 3.3 有关。我创建了一个 python 2.7 环境,并且 user_registered 代码按预期工作。

完整的重现代码:

from flask import Flask,render_template
from playhouse.flask_utils import FlaskDB
import os
from flask.ext.security import Security, PeeweeUserDatastore
from flask.ext.security.signals import user_registered
from flask.ext.login import user_logged_out
from peewee import *
from playhouse.signals import Model
from flask.ext.security import UserMixin,RoleMixin

app = Flask(__name__)

app.config['ADMIN_PASSWORD']='secret'
app.config['APP_DIR']=os.path.dirname(os.path.realpath(__file__))
app.config['DATABASE']='sqliteext:///%s' % os.path.join(app.config['APP_DIR'], 'blog.db')
app.config['SECRET_KEY'] = 'shhh, secret!'
app.config['SECURITY_REGISTERABLE'] = True
app.config['SECURITY_CONFIRMABLE'] = False
app.config['SECURITY_SEND_REGISTER_EMAIL'] = False

flask_db = FlaskDB()
flask_db.init_app(app)
database = flask_db.database

class BaseModel(Model):
    class Meta:
        database=flask_db.database


class User(BaseModel, UserMixin):
    email=CharField()
    password=CharField()
    active = BooleanField(default=True)
    confirmed_at = DateTimeField(null=True)

    def is_active(self):
        return True

    def is_anonymous(self):
        return False

    def is_authenticated(self):
        return True


class Role(BaseModel, RoleMixin):
    name = CharField(unique=True)
    description = TextField(null=True)


class UserRoles(BaseModel):
    user = ForeignKeyField(User, related_name='roles')
    role = ForeignKeyField(Role, related_name='users')
    name = property(lambda self: self.role.name)
    description = property(lambda self: self.role.description)


user_datastore = PeeweeUserDatastore(database, User, Role, UserRoles)
security = Security(app, user_datastore)

@user_registered.connect_via(app)
def user_registered_sighandler(sender,**extra):
    print("print-user_registered_sighandler")

@user_logged_out.connect_via(app)
def on_user_logged_out(sender, user):
    print('USER LOG OUT: made it in',user)

@app.route('/')
def index():
    print(user_registered.receivers)
    return render_template('base.html')

database.create_tables([User,Role,UserRoles], safe=True)
app.run(debug=True)

base.html 模板:

<!doctype html>
<html>
  <head>
    <title>Blog</title>
  </head>
  <body>
          <ul>
            {% if current_user.is_authenticated() %}
              <li><a href="{{ url_for('security.logout',next='/') }}">Log out</a></li>
              <li><a href="{{ url_for('security.register') }}">Register</a></li>
        {% else %}
        <li><a href="{{ url_for('security.login',next='/') }}">Login</a></li>
        <li><a href="{{ url_for('security.register') }}">Register</a></li>
            {% endif %}
            {% block extra_header %}{% endblock %}
          </ul>
  </body>
</html>

我可以用类似的方法来做到这一点:

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


@user_registered.connect_via(app)
def user_registered_sighandler(app, user, confirm_token):
    default_role = user_datastore.find_role("Pending")
    user_datastore.add_role_to_user(user, default_role)
    db.session.commit()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask-Security user_registered 信号在 Python 3.3 中未收到,但在 2.7 中有效 的相关文章

  • 类的 IPython 表示

    我正在使用我创建的模块尝试 IPython 但它没有显示类对象的实际表示 相反 它显示类似的内容 TheClass module TheClass name I heavily在这个模块中使用元类 我有真正有意义的类表示 应该向用户显示 是
  • Pandas set_levels,如何避免标签排序?

    我使用时遇到问题set levels多索引 from io import StringIO txt Name Height Age Metres A 1 25 B 95 1 df pd read csv StringIO txt heade
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • 在 Celery 任务中调用 Google Cloud API 永远不会返回

    我正在尝试拨打外部电话Google Cloud Natural Language API从一个内Celery任务 使用google cloud python包裹 问题是对 API 的调用永远不会返回 挂起 celery task def g
  • 如何从Python中的函数返回多个值? [复制]

    这个问题在这里已经有答案了 如何从Python中的函数返回多个变量 您可以用逗号分隔要返回的值 def get name you code return first name last name 逗号表示它是一个元组 因此您可以用括号将值括
  • MongoEngine 查询具有以列表中指定的前缀开头的属性的对象的列表

    我需要在 Mongo 数据库中查询具有以列表中任何前缀开头的特定属性的元素 现在我有一段这样的代码 query mymodel terms term in query terms 并且这会匹配在列表 term 上有一个项目的对象 该列表中的
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • 为什么一旦我离开内置的运行服务器,Django 就无法找到我的管理媒体文件?

    当我使用内置的简单服务器时 一切正常 管理界面很漂亮 python manage py runserver 但是 当我尝试使用 wsgi 服务器为我的应用程序提供服务时django core handlers wsgi WSGIHandle
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • 如何将 GAE 中一种 Kind 中的所有实体复制到另一种 Kind 中,而无需显式调用每个属性

    我们如何使用function clone entity 如中所述在 Python 中复制 Google App Engine 数据存储中的实体 而无需在 编译 时知道属性名称 https stackoverflow com question
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • 制作一份 Python 文档的 PDF 文件

    Python 官方网站提供 PDF 文档下载 但它们是按章节分隔的 我下载了源代码并构建了 PDF 文档 这些文档也是单独的 PDF 我怎么能够从源代码中的 Makefile 构建一个 PDF 文件 我认为这样阅读起来会更方便 如果连接单独
  • python 对浮点数进行不正确的舍入

    gt gt gt a 0 3135 gt gt gt print 3f a 0 314 gt gt gt a 0 3125 gt gt gt print 3f a 0 312 gt gt gt 我期待 0 313 而不是 0 312 有没有
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size

随机推荐

  • 如何判断内存是否对齐?

    我是使用 SSE SSE2 指令优化代码的新手 到目前为止我还没有走得太远 据我所知 常见的 SSE 优化函数如下所示 void sse func const float const ptr int len if ptr is aligne
  • Spring中使用@Valid验证表单不起作用

    我想验证我的表单 但这不起作用 我的实体类 import java io Serializable import java util Set import javax persistence Column import javax pers
  • 在 Dart 编程时如何为 VSCode 中的类型着色并添加样式

    在 Dart 中编程时 我想在 VSCode 中更改声明类型的颜色 并可能添加粗体 斜体和其他样式 这可能吗 我认为这将有助于可读性 例如 我希望 Widget BuildContext 和 Loading Container 采用不同的颜
  • 大 O 包含两个相乘的变量

    如果我采用该功能 def nested multiplier a b returns a b count 0 for i in range a for j in range b count 1 return count 这里相当清楚的是 就
  • 直接继承 Trait 失败,但代理有效

    为什么添加代理特征有效而直接继承失败 我在 github 上创建了一个可运行的项目 https github com leftofnull so inheritance 如果您克隆存储库并运行sbt console其次是com stacko
  • Docker 构建陷入 npm run 构建步骤

    我试图创建一个 docker 映像 但它卡在 npm run build 步骤中 我可以看到构建成功完成的消息 但它没有继续进行下一步 在 docker 文件下面 我使用节点 16 13 1 作为基础图像 RUN mkdir p usr s
  • Python3 从同级目录导入模块

    对于 python 3 10 项目中的新结构 我必须将不同的模块彼此分开 并将它们移动到同一层的不同文件夹中 文件夹结构看起来有点类似于 Root main py init py folder1 init py a py folder2 i
  • WPF自定义DatagridColumn绑定问题

    我试图为数据网格定义一个新的列模板 我可以在我的应用程序中重复使用它 但是当我尝试使用它时 我得到 System Windows Data 错误 2 找不到管理 FrameworkElement 或 FrameworkContentElem
  • 在外部 JavaScript 中使用 django 模板标签

    我在 html 页面中包含了一个 js 文件 例如 application js 但我无法在该 js 文件中使用 django 模板标签 有什么方法可以直接在外部 js 文件中使用 django 模板标签吗 前提是你会像模板一样解析 JS
  • JS setTimeout() 替代方案

    就像我解释的那样here http blog mlefree com 2016 02 settimeout alternative as happy new html 我不能再使用 window setTimeout 和任何窗口经典函数 如
  • 使用使用 Vue-CLI 创建的应用程序提供 404 页面

    我正在使用 Vue CLI 创建 Vue 应用程序 我不喜欢的一种行为是任何不存在的 URL 例如 localhost 8080 nonexistent file html 得到服务 代码为 200 就好像它是根一样 localhost 8
  • 更改 git merge 的相似性索引阈值并涉及重命名(例如 diff 上的 -M[n] --find-renames[=n] )

    我们有一些用于重命名检测启发式的配置选项diff log show and merge diff renameLimit执行复制 重命名检测时要考虑的文件数量 相当于 git diff 选项 l 差异重命名告诉 git 检测重命名 如果设置
  • 如何减少RadioButton绑定代码?

    我正在跟进这个答案关于如何将枚举 在我的例子中是整数 数据绑定到RadioButtons https stackoverflow com a 2908885 171121 但是如果我有几个 TabItems 每个 TabItems 都有 1
  • 如何在代码后面设置DataGrid行的背景颜色?

    我创建一个DataGrid我的代码后面的对象并设置内容obj ItemsSource 现在我想在后面的代码中设置特定行的背景颜色 我怎样才能实现这个目标 Update 我创建了DataGrid后面代码中的对象如下 var dataGrid
  • Java 归并排序

    我正在尝试创建一个合并排序方法 但它不断给出错误的排序 我在哪里可以更改以使其真正对数组进行排序 代码的哪一部分必须不同 感谢您的时间 public static void mergeSort int array int left int
  • 使用 django 测试客户端发送 JSON

    我正在开发一个 django 项目 它将作为 webhook 的端点 Webhook 会将一些 JSON 数据发布到我的端点 然后端点将解析该数据 我正在尝试为其编写单元测试 但我不确定是否正确发送了 JSON 我在管道端点中不断收到 Ty
  • Netbeans 和 C++ 安装

    我在使用 Netbeans 7 4 和 Cygwin 4 x 编译 C 程序时遇到了一个小问题 我已经完成了 netbeans 教程中的所有操作 我已经安装了 gcc gdb g 和 make 编译器 Netbeans 属性中的每条路径都已
  • Java FTP 的服务器端实现

    我想建立一个后台没有实际文件的FTP服务器 相反 我希望上传到它的文件立即由我的后端处理 上传目录的文件列表应包含尚未处理的文件 删除或移动应该是不可能的 另外 在下载方面 我想展示我能够提供的那些文件 但文件应根据需要再次由后端创建 由于
  • 为什么 JSP 不支持表单上的“put”方法?有没有办法在jsp表单上使用put方法? [复制]

    这个问题在这里已经有答案了 我正在尝试实施putJSP形式的方法 但似乎是支持的 背后的原因是什么 如果我使用 HTML 而不是 JSP 并调用实现的 servlet 来接受 put 请求 那么它会按预期工作 但相同的代码不能在 JSP 上
  • Flask-Security user_registered 信号在 Python 3.3 中未收到,但在 2.7 中有效

    我正在尝试使用 user registered 信号 以便在用户使用 Flask security 注册时为用户设置默认角色 如下链接所示 在 Flask 安全性中设置默认角色 https stackoverflow com questio