Flask 之 SQLAlchemy

本文介绍了如何使用Flask-SQLAlchemy在Python中创建用户和文章模型,包括数据建模、基本操作(增删改查)、关联关系和数据分页显示。

SQLAlchemy 是 Python 下非常好的 ORM 框架,支持使用 MySQL、PostgreSQL、SQLite 等主流数据库。Flask-SQLAlchemy 基于 SQLAlchemy 对 Flask 进行了适配,使其在 Flask 下的使用变得简单。


1. 建立模型

在建立模型之前,需要对客户需求进行分析。

假设现在需要实现一个简单的文章发布系统,用户可以在其中发布文章,管理员用户可管理(增、删、改、查)所有文章。此处可以将以上需求分解为“用户模块”与“文章模块”,然后为各个模板设计相应的模型。

如果需要实现基本的登录功能,则用户模型需要拥有“用户名”“密码”这些属性。用户还可以作为管理员,为了区分普通用户和管理员,用户模型还需要拥有“是否为管理员”属性。另外,如果需要创建文章,便需要使用“id”属性将用户模型与文章模型进行关联。

这里使用的是 SQLite 数据库,可视化工具为 sqlitestudio。

表 1 用户模型结构

模型属性 Python 中数据类型 数据表中字段类型 说明
id int INTEGER 用于指向用户的唯一编号
username str VARCHAR 用户名
password str VARCHAR 密码
is_admin bool BOOLEAN 是否为管理员

表2 文章模型结构

模型属性 Python 中数据类型 数据表中字段类型 说明
id int INTEGER 用于指向文章的唯一编号
title str VARCHAR 文章标题
content str VARCHAR 文章正文内容

初始化 Flask-SQLAlchemy 并且定义用户模型和文章模型

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import os
from flask import Flask, render_template
from flask_script import Manager, Shell
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)
# 设置数据库存储位置
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLCLCHEMY_TRACK_MODIFICATIONS'] = False
# flask_sqlalchemy 初始化代码
db = SQLAlchemy()
db.init_app(app)
manager = Manager(app)

@app.route('/', methods=['post'])
def login():
    return "Hello World!"

# 定义用户模型
class UserModel(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.INTEGER, primary_key=True, autoincrement=True)
    username = db.Column(db.VARCHAR, unique=True)
    password = db.Column(db.VARCHAR)
    is_admin = db.Column(db.BOOLEAN, default=False, nullable=False)

# 定义文章模型
class ArticleModel(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.INTEGER, primary_key=True)
    title = db.Column(db
<think>首先,用户的问题是关于Python Flask框架或Python与Flash集成的。用户意图似乎是寻找与Python中Flash相关的框架或功能,可能是Web开发框架(如Flask)或与Flash技术集成的内容。但根据上下文,用户提到的"Flash"可能是个拼写错误,应该是"Flask",因为引用中提到了Flask框架。引用1、2、3都涉及Flask框架,所以我认为用户指的是Flask。 现在,回顾系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如:[^1] 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考的引用: - 引用1:关于在Flask中集成SQLAlchemyFlask-Login。 - 引用2:关于Flask的路由机制。 - 引用3:关于Flask-WTF表单验证。 用户的问题:"请问Python Flask框架 或 Python与Flash集成"。考虑到引用,用户可能是在问Flask框架,而不是Flash技术。Flash技术(如Adobe Flash)在Python中集成不常见,所以更可能是指Flask。 因此,我应该专注于回答Python Flask框架。 回答结构: - 结构清晰,逐步解决问题。 - 介绍Flask框架。 - 解释其核心功能。 - 引用相关引用。 - 生成相关问题。 生成相关问题:在回答末尾添加相关问题部分,如示例所示。 内容大纲: 1. **介绍Flask框架**:简要解释Flask是什么。 2. **核心功能**:讨论路由、模板、表单处理等。 3. **集成示例**:基于引用,讨论如何集成数据库和用户认证(如SQLAlchemyFlask-Login)。 4. **引用应用**:自然地添加引用标识。 5. **相关问题**:生成3-5个相关问题。 确保使用中文。 数学表达式:虽然这个问题可能不涉及数学,但如果有,比如在讨论算法时,要使用正确的LaTeX格式。但在这里,可能不需要数学表达式。 最终输出格式: - 回答主体。 - 相关问题部分。 相关问题示例: 1. Flask框架的核心优势是什么? 2. 如何在Flask中实现用户认证? 3. Flask与其他Python Web框架的比较? 基于引用,我可以提到: - 引用1:集成SQLAlchemyFlask-Login。 - 引用2:路由机制。 - 引用3:表单验证。 所以,回答中融入这些。</think>### Python Flask框架介绍 Flask是一个轻量级的Python Web框架,专注于简洁性和可扩展性。它提供了核心的Web开发功能,如路由、请求处理和模板渲染,同时允许开发者通过扩展库集成额外功能(如数据库操作、用户认证)。Flask的设计哲学是“微核心”,这意味着它只包含基本功能,但可以轻松集成其他库来构建完整的Web应用。以下我将逐步介绍Flask的核心概念和常见集成方式,帮助您快速上手。 #### 1. **Flask框架的基本结构** Flask的核心是应用实例(`Flask`对象),它处理HTTP请求并返回响应。例如,定义一个简单的Flask应用只需几行代码: ```python from flask import Flask app = Flask(__name__) @app.route('/') def home(): return 'Hello, World!' if __name__ == '__main__': app.run(debug=True) ``` - **路由机制**:Flask使用装饰器(如`@app.route()`)将URL映射到Python函数(称为视图函数)。当用户访问特定URL时,Flask调用对应的函数生成响应。例如,访问根路径`/`会执行`home()`函数并返回"Hello, World!"。这种设计简化了Web请求的处理[^2]。 - **模板渲染**:Flask支持Jinja2模板引擎,用于动态生成HTML。例如,创建一个`templates/index.html`文件,并在视图函数中使用`render_template`渲染它。 #### 2. **常见功能集成** Flask的扩展性是其最大优势。以下基于引用内容,介绍两个关键集成: - **数据库集成(使用SQLAlchemy)**:SQLAlchemy是一个强大的ORM(对象关系映射)库,用于在Flask中管理数据库操作。集成步骤包括安装`flask-sqlalchemy`扩展,配置数据库连接,并定义模型类。例如: ```python from flask_sqlalchemy import SQLAlchemy app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True, nullable=False) ``` 这允许您执行数据库查询(如`User.query.all()`),并自动处理连接池和事务[^1]。 - **用户认证(使用Flask-Login)**:Flask-Login扩展简化了用户登录、会话管理和权限控制。集成时,需定义用户模型并实现必要方法(如`is_authenticated`)。表单验证使用Flask-WTF扩展,例如: ```python from flask_wtf import FlaskForm from wtforms import StringField, PasswordField from wtforms.validators import DataRequired class LoginForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) password = PasswordField('Password', validators=[DataRequired()]) ``` 在视图函数中,使用`form.validate_on_submit()`验证表单数据(需从`flask_wtf`导入`FlaskForm`)。验证通过后,您可以获取用户名和密码,实现登录逻辑[^3]。 #### 3. **优势与应用场景** Flask适合快速开发小型到中型Web应用,如API服务、博客系统或原型验证。其优势包括: - **轻量级**:核心库小,启动快,适合初学者。 - **灵活性**:通过扩展(如Flask-RESTful for API)可定制功能。 - **社区支持**:丰富的扩展库覆盖数据库、认证、缓存等。 然而,对于大型应用,可能需要考虑更全栈的框架(如Django)。 #### 注意事项 - **Python与Flash技术集成**:如果您指的是Adobe Flash(一种旧的多媒体技术),它在现代Web开发中已不推荐使用(Flash已于2020年终止支持)。Python可通过库如`pygame`处理简单动画,但Flash集成在Web应用中很少见,建议优先使用HTML5替代方案。 - **可靠性提示**:Flask的轻量性也意味着需要手动处理安全性(如CSRF保护)。确保使用扩展库(如Flask-WTF)来加固应用。 Flask框架的核心在于其简约性和扩展能力,结合SQLAlchemyFlask-Login等工具,您可以高效构建安全的Web应用[^1][^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值