- 34
- 0
数据库设计:
db = SQLAlchemy()
roles_users = db.Table(
'roles_users',
db.Column('user_id',db.Integer(),db.ForeignKey('users.id')),
db.Column('role_id',db.Integer(),db.ForeignKey('roles.id'))
)
class Role(db.Model,RoleMixin):
"""创建角色模型类"""
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
description = db.Column(db.String(255))
def __init__(self):
self.name = name
def __repr__(self):
return '%r' % self.name
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(30), unique=True)
email = db.Column(db.String(64), unique=True)
password = db.Column(db.Text,nullable=False)
last_login_at = db.Column(db.DateTime, default=datetime.utcnow)
current_login_at = db.Column(db.DateTime)
last_login_ip = db.Column(db.String(100))
current_login_ip = db.Column(db.String(100))
login_count = db.Column(db.Integer)
active = db.Column(db.Boolean())
status = db.Column(db.String(64))
confirmed_at = db.Column(db.DateTime, default=datetime.now())
roles = db.relationship('Role',secondary='roles_users',backref=db.backref('users',lazy='dynamic'))
def __init__(self, name=None, email=None):
self.name = name
self.email = email
self.roles = roles
def to_json(self):
json_data = {
'id': self.id,
'name': self.name,
'roles':self.roles,
'email': self.email,
'status': self.status,
'active': self.active,
'confirmed_at': self.confirmed_at,
'current_login_at': self.current_login_at,
'current_login_ip': self.current_login_ip,
'last_login_at': self.last_login_at,
'last_login_ip': self.last_login_ip,
'login_count': self.login_count,
'status': self.status
}
return json_data
@staticmethod
def verify_auth_token(token):
s = Serializer(current_app.config['SECRET_KEY'])
try:
data = s.loads(token)
except SignatureExpired:
return None # valid token, but expired
except BadSignature:
return None # invalid token
user = User.query.get(data['id'])
return user
请求返回:
@user.route('/info', methods=['GET', 'POST'])
# @login_required
def userinfo():
token=request.args.get('token')
if not token:
return jsonify({'status':201,'state':0,'msg':'用户不存在'})
else:
data = User.verify_auth_token(token)
return jsonify({'status':200,'state':1,'msg':'获取用户数据成功','data': data.to_json()})
报错: TypeError: Object of type Role is not JSON serializable
为何呢? 有人遇到吗?
- 共 0 条
- 全部回答
-
剑言散人 普通会员 1楼
在 Flask 中,你可以使用 Flask-Login 模块来实现用户角色的获取和返回。以下是一个简单的示例:
```python from flask import Flask, request, redirect, url_for, flash from flask_login import LoginManager, login_user, current_user from flask_sqlalchemy import SQLAlchemy from flask_login import UserMixin
app = Flask(name) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' db = SQLAlchemy(app)
class User(UserMixin, db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) role = db.Column(db.String(20), nullable=False)
@login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id))
@app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] user = User.query.filter_by(username=username, password=password).first() if user: login_user(user) return redirect(url_for('index')) else: flash('Invalid username or password') return render_template('login.html')
if name == 'main': app.run(debug=True) ```
在这个示例中,我们首先导入了 Flask 和相关模块。然后,我们定义了一个 User 类,它继承自 Flask 的 User 模型,并定义了角色(role)字段。我们还定义了一个 LoginManager 组件,它用于管理登录状态。最后,我们定义了一个路由,当用户访问 '/login' 端点时,它会处理登录请求。
在 login 函数中,我们首先检查请求方法是否为 POST。如果是,我们从请求表单中获取用户名和密码。然后,我们使用 Flask-Login 的 ORM 模块查询数据库,找到具有给定用户名和密码的用户。如果找到用户,我们就登录用户并重定向到首页。否则,我们使用 flash 函数显示一个错误消息。
注意,这个示例假设你的 Flask 应用已经包含了 Flask-Login 模块,并且已经在应用程序中正确地加载了数据库。如果这些假设不成立,你需要根据你的具体需求进行修改。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
