flask - 烧瓶中不同类型的用户注册
问题描述
我是 Flask 的新手,我只想用它创建一个简单的市场。我的网站中有三种类型的用户 [卖家、买家、管理员]。我认为每种类型的用户都应该有自己的注册和登录,因为由于他们的角色,应该提供不同类型的信息。另一方面,每个用户可能在网站中拥有多个角色,因此我认为不可能为所有用户创建一个表并为他们分配角色。因此,我认为每种类型的用户应该有三个表。
由于只有用户的用户加载器,我怎样才能实现我的目标。
我不确定它是否正确,我想我可以创建一个包含所有必需列的完整用户,并根据用户用于注册的地址,将适当的信息添加到数据库中。并根据用户用于登录的地址找到正确的角色并显示正确的视图。
解决方案
您可以为所有类型的用户使用一种模型:
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
usertype = db.Column(db.String(120))
password_hash = db.Column(db.String(128))
用户加载器将只有 ID:
@login.user_loader
def load_user(id):
return User.query.get(int(id))
确保在注册期间您应该询问用户类型:
class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
email = StringField('Email', validators=[DataRequired(), Email()])
usertype = SelectField('User Type', choices = [('sellers', 'sellers'),('buyers', 'buyers')], validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
password2 = PasswordField(
'Repeat Password', validators=[DataRequired(), EqualTo('password')])
submit = SubmitField('Register')
并且在登录期间无需提供用户类型:
class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
remember_me = BooleanField('Remember Me')
submit = SubmitField('Sign In')
在 HTML 文件中,您可以进行相应的编码。以这段取自 base.html 的代码为例。
{% if current_user.usertype == 'buyers' %}
<ul class="nav navbar-nav">
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">List
<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{{ url_for('buyerslist')}}">List of buyers</a></li>
</ul>
</li>
</ul>
{% endif %}
推荐阅读
- javascript - 如何更改 html 快捷方式“!”的默认值 在 vsc 中?(这样我就可以添加更多的html代码)
- mysql - 如何运行 Django 和 Spark 应用程序
- node.js - 如何在nodejs的另一个js文件中包含一个js文件
- asp.net - ASP.net 数据绑定字段更新值
- java - 带有变音符号的 JAVA MessageFormat.Format (ä / ö / ü)
- haskell - 如何进行 Beam 查询?
- php - 跨api调用laravel的环境文件问题
- ansible - 在所有元素中创建具有相同值的字典
- cordova - 带有 Cast Chrome Sender Framework API 的 Cordova 插件
- jwt - 如何从 Azure Active Directory 获取公共证书