flask中数据库查询结果(单个或list形式)返回json格式给前端

本文介绍了如何使用Python从数据库中查询数据并将其序列化为JSON格式的方法,包括使用mysql.connector进行数据库连接,执行SQL查询,以及将查询结果转换为JSON响应的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码参考:

def index():
   cur = mysql.connection.cursor()
   cur.execute('''SELECT * FROM Users WHERE id=1''')
   rv = cur.fetchall()
   payload = []
   content = {}
   for result in rv:
       content = {'id': result[0], 'username': result[1], 'password': result[2]}
       payload.append(content)
       content = {}
   return jsonify(payload)
def get(self)# 获取
        try:
            # 从数据获取全部数据存到list
            homework_li = HomeworkTable.query.all()
        except:
            # 获取失败,返回错误
            return jsonify(code=11, message='query fail')

        if homework_li is None:
            return jsonify(code=11, message='query fail')
        # 返回得到的homework对象,这里的homework是model对象,不可序列化,所以不能直接放入返回的json里面
        # 需要把homework中的各个字段对应放到一个dict里面,这个功能上面封装成了serialize_course函数
        return jsonify(code=0, message='OK', data={'homeworks':  self.serialize_homework(homework_li)})
<think>好的,用户想了解Flask框架的详细用法和原理。首先,我需要回顾一下Flask的基本概念和核心组件。记得Flask是一个轻量级的Web框架,基于Werkzeug和Jinja2构建,所以得先解释这两个依赖的作用。 接下来,用户可能需要知道如何安装Flask,虽然问题中没有直接提到,但教程通常包括安装步骤,所以应该包含这部分内容。然后,需要展示一个简单的示例,比如“Hello World”,这样用户能快速上手。 然后,得详细说明Flask的核心组件,比如路由、视图函数、请求和响应对象,以及模板引擎Jinja2。这些都是Flask的基础,用户可能想知道如何处理不同的HTTP方法,比如GET和POST,所以需要举例说明表单处理的过程。 另外,用户提到了原理,这部分可能需要解释Flask的WSGI兼容性,以及如何通过扩展来增加功能。比如,使用Flask-SQLAlchemy进行数据库操作,Flask-WTF处理表单验证。这些扩展能展示Flask的灵活性。 还要注意用户提供的引用内容,引用[1]和[2]中提到了留言板应用,所以在教程里应该包含一个实际案例,比如留言板的实现步骤。这包括创建路由、处理表单数据、使用模板渲染页面,以及数据的存储,可能用到一个列表来模拟数据库。 用户可能对Flask的运行机制感兴趣,比如上下文机制中的应用上下文和请求上下文,这些需要简要说明,帮助理解Flask如何处理多请求环境。 最后,按照用户的要求生成相关问题,比如对比其他框架、处理复杂请求、扩展的使用等,确保问题覆盖了用户可能感兴趣的后续学习点。 需要检查是否所有数学公式和独立公式都正确使用了$和$$,虽然在这个回答中可能涉及较少,但如果有代码块技术术语,要确保格式正确。同时,保持回答结构清晰,分步骤讲解,并引用提供的参考资料。</think>### Flask框架详细介绍及使用教程 Flask是一个基于Python的轻量级Web框架,其核心设计理念是保持简洁灵活,同时通过扩展支持复杂功能。以下从**核心原理**、**基础用法**和**实际案例**三个方面展开说明。 --- #### 一、核心原理 1. **WSGI兼容性** Flask基于Werkzeug实现WSGI(Web Server Gateway Interface)协议,使应用能与多种Web服务器(如Apache、Nginx)无缝对接。WSGI定义了Web服务器与Python应用之间的通信标准[^1]。 2. **Jinja2模板引擎** 使用Jinja2渲染动态HTML页面,支持模板继承、变量替换和控制逻辑(如循环和条件判断)。例如: ```python {{ title }} # 变量替换 {% for item in list %} # 控制结构 ``` 3. **上下文机制** - **应用上下文**:存储全局配置(如数据库连接)。 - **请求上下文**:处理单个HTTP请求的临时数据(如表单参数)[^2]。 --- #### 二、基础用法 1. **安装与最小应用** 安装命令: ```bash pip install flask ``` 最小示例(`app.py`): ```python from flask import Flask app = Flask(__name__) @app.route('/') def home(): return 'Hello World!' if __name__ == '__main__': app.run(debug=True) ``` 2. **路由与视图函数** 使用`@app.route`装饰器定义URL规则: ```python @app.route('/user/<username>') def show_user(username): return f'User: {username}' ``` 3. **请求与响应处理** - 获取GET/POST参数: ```python from flask import request @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] return redirect('/') ``` - 返回JSON响应: ```python from flask import jsonify @app.route('/api/data') def get_data(): return jsonify({'key': 'value'}) ``` --- #### 三、实际案例:留言板应用 1. **项目结构** ``` /message-board ├── app.py └── templates └── index.html ``` 2. **核心代码** ```python from flask import Flask, render_template, request, redirect app = Flask(__name__) messages = [] # 临时存储留言 @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST': content = request.form.get('content') messages.append(content) return redirect('/') return render_template('index.html', messages=messages) ``` 3. **模板文件(`templates/index.html`)** ```html <!DOCTYPE html> <html> <body> <h1>留言板</h1> <form method="post"> <input type="text" name="content" required> <button type="submit">提交</button> </form> <ul> {% for msg in messages %} <li>{{ msg }}</li> {% endfor %} </ul> </body> </html> ``` --- #### 四、扩展功能 1. **数据库集成(Flask-SQLAlchemy)** ```python from flask_sqlalchemy import SQLAlchemy app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///messages.db' db = SQLAlchemy(app) class Message(db.Model): id = db.Column(db.Integer, primary_key=True) content = db.Column(db.String(200)) ``` 2. **表单验证(Flask-WTF)** ```python from flask_wtf import FlaskForm from wtforms import StringField, SubmitField class MessageForm(FlaskForm): content = StringField('留言内容', validators=[DataRequired()]) submit = SubmitField('提交') ``` ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值