Flask用户注册定制

时间:2017-04-27 21:48:39

标签: python flask registration flask-wtforms flask-login

我正在使用这个Flask应用程序(数据分析仪表板),我正在使用Flask-User来处理授权,注册和登录。关于自定义Flask-User的注册过程,我有几个问题:

  1. 除了密码重置之外,我不打算用电子邮件做很多事情。因此,我可以禁用电子邮件确认/帐户确认并在注册后使帐户已经激活/准备好,这样我的用户就不必经历这个了吗?

  2. 只有管理员才能访问注册表单。他们将是唯一能够向系统添加新用户的人。 (我是通过roles_required装饰器完成的)我想要完成的是将角色信息放在同一个注册页面中,以便在注册新用户时将其保存到我的UserRoles表中。从文档中,我知道如何在注册表单中添加新字段,这些字段应该出现在UserUserProfile模型中。如何在注册页面中添加另一个表单并将字段保存到我的UserRoles表中?我还想过自定义USER_AFTER_REGISTER_ENDPOINT端点以指向一个视图,以便向我刚注册的用户添加其他信息 - 这样可以避免弄乱register()视图。但是,我不知道如何将这个新视图传递给我刚刚注册的用户的ID。

  3. 如果这个解释仍然令人困惑,请告诉我。我会尽力让它更清楚。

    谢谢!

    修改:我的UserRolesUserRoles表格均遵循Flask-User reference中列出的内容。

    此问题特定于Flask-User扩展程序。

1 个答案:

答案 0 :(得分:0)

好的,从我收集的内容中你有两张桌子 - 1)用户配置/用户 2)的UserRole

现在我不知道你是如何设置models.py文件的。如果你能够更多地了解这一点,那将会有所帮助。 但是,让我尽力回答我的能力。

添加从User到UserRoles的一对多关系,以便一个用户可以拥有多个角色(比如编辑,更新,删除等)。

您可以使用SQLAlchemy中的backref函数添加一对多关系。 例如 -

class User(Base):
 __tablename = 'user'
 column1 = Column(Integer,primary_key = true, nullable = false)
 columnUsername = Column(String(20))

并将您的userprofile定义为

class UserRole(Base): 
 __tablename__ = 'userrole'


 userprofileID = Column(Integer,nullable = False,primary_key=true)
 column1role = Column(String(20))
 columnForeignKey = Column(Integer,ForeignKey(user.columnUsername))
 user = relationship("User",backref=backref('userrole'))
#the above line adds a one to many relationship

现在,当您开始从字段中添加数据时(在烧瓶中),您需要先通过 -

获取用户
user = User(columnUsername = 'someuser')
user1 = User() #create an object of User class
user1.columnUsername = user #what you just defined(can be got from the textbox of entered name)
session.add(user1)
#now get the role you want to add assuming you have defined them already
role1 = session.query(UserRole)filter(UserRole.column1role = 'somePredefinedRole'
role2 = session.query(UserRole)fileter(UserRole.column1role='someOtherrole'

#this adds two user roles to the specific user
user1.userrole.append(role1)
user1.userrole.append(role2)
session.add(user1)
session.commit()

这就是我要做的事情。 我不确定这是不是你想要的。

需要注意的是,您不必担心烧瓶,而是关于您正在使用的ORM(我更喜欢SQLAlchemy)。 如果你能掌握ORM,那么你几乎可以解决这些问题。 请原谅我,如果我误解了你的问题,并且一无所获。

干杯