Python框架Flask封装和SQLAlchemy实际应用

2024-04-10 18:15 Python框架Flask封装和SQLAlchemy实际应用已关闭评论

以下是一个使用Flask和SQLAlchemy(假设已经配置好了数据库连接)实现用户登录API接口的例子,同时也实现了响应的统一格式封装:

from flask import Flask, request, jsonify, make_response
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import check_password_hash
import uuid

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'  # 示例数据库URI
db = SQLAlchemy(app)

# 定义User模型
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password_hash = db.Column(db.String(128), nullable=False)

# 初始化数据库
db.create_all()

# 定义统一响应格式
def wrap_response(data=None, error=None, status_code=200):
    response_dict = {
        "status": "success" if error is None else "error",
        "data": data,
        "message": error if error else "",
    }
    return make_response(jsonify(response_dict), status_code)

# 登录API接口
@app.route('/api/login', methods=['POST'])
def login():
    data = request.get_json()
    username = data.get('username')
    password = data.get('password')

    if not username or not password:
        return wrap_response(error="Username or password missing", status_code=400)

    user = User.query.filter_by(username=username).first()

    if user is None:
        return wrap_response(error="User not found", status_code=404)

    if not check_password_hash(user.password_hash, password):
        return wrap_response(error="Incorrect password", status_code=401)

    # 登录成功,假设生成一个简单的token
    token = str(uuid.uuid4())

    # 在实际项目中,你可能要存储token与用户的关系,这里仅作演示
    return wrap_response(data={"token": token}, message="Logged in successfully")

if __name__ == '__main__':
    app.run(debug=True)

在这个例子中:

  1. 用户模型包含了用户名和密码哈希。
  2. wrap_response函数用于统一响应格式,不论成功与否都会按照相同的结构返回JSON响应。
  3. /api/login接口处理POST请求,从请求体中获取用户名和密码。
  4. 查询数据库查找用户名对应的用户,如果没有找到或密码校验失败,则返回错误响应。
  5. 若登录成功,则生成一个随机的token(实际应用中应该是JWT或其他安全令牌)并返回成功响应。

请注意,实际项目中密码应使用安全的方式进行存储(如bcrypt进行哈希加密),并且token的生成和验证应该采用更为安全的方案,如使用JWT库。此外,错误处理和身份验证逻辑在生产环境中应更加严谨。

当前文章价值8.37元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://www.teachcourse.cn/3242.html ,谢谢支持!

资源分享

分类:python 标签:, ,
解决代理账号或FQ:Genymotion离线安装包 解决代理账号或FQ:Genymotio
php关键字流程控制详细介绍 php关键字流程控制详细介绍
ArrayMap方法解析 ArrayMap方法解析
python读取markdown文件内容 python读取markdown文件内容

评论已关闭!