Python编程:Flask扩展Flask-WTF和Flask-SQLAlchemy应用实例

简介: Python编程:Flask扩展Flask-WTF和Flask-SQLAlchemy应用实例

文件目录结构


./
├── main.py
├── templates
│   └── index.html
└── static
    └── js
        └── jquery-3.3.1.min.js

一共涉及三个文件


1、jquery-3.3.1.min.js 可百度下载


2、 main.py

# -*- coding: utf-8 -*-
from flask import Flask, render_template, request, url_for, redirect, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
app = Flask(__name__)
# 配置数据库信息
class Config(object):
    SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/demo"
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    SECRET_KEY = "adsfasdf9932@@fdsafsdaf"
app.config.from_object(Config)
db = SQLAlchemy(app)
class Author(db.Model):
    """作者"""
    __tablename__ = "tbl_author"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    books = db.relationship("Book", backref="author")
class Book(db.Model):
    """书籍"""
    __tablename__ = "tbl_book"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    author_id = db.Column(db.Integer, db.ForeignKey("tbl_author.id"))
def db_init():
    """
    初始化数据库
    mysql> create database demo default charset utf8;
    """
    db.drop_all()
    db.create_all()
    author1 = Author(name="吴承恩")
    author2 = Author(name="施耐庵")
    author3 = Author(name="罗贯中")
    author4 = Author(name="曹雪芹")
    db.session.add_all([author1, author2, author3, author4])
    db.session.commit()
    book1 = Book(name="西游记", author=author1)
    book2 = Book(name="红楼梦", author=author4)
    book3 = Book(name="三国演义", author=author3)
    book4 = Book(name="水浒传", author=author2)
    db.session.add_all([book1, book2, book3, book4])
    db.session.commit()
class AuthorBookForm(FlaskForm):
    """作者书籍表单"""
    author_name = StringField(label="作者姓名", validators=[DataRequired("作者姓名不能为空")])
    book_name = StringField(label="书籍名称", validators=[DataRequired("书籍名称不能为空")])
    submit = SubmitField(label="提交")
# 视图函数
@app.route("/", methods=["GET", "POST"])
def index():
    form = AuthorBookForm()
    # 验证表单
    if form.validate_on_submit():
        author_name = form.author_name.data
        book_name = form.book_name.data
        # 保存数据
        author = Author(name=author_name)
        db.session.add(author)
        db.session.commit()
        book = Book(name=book_name, author=author)
        db.session.add(book)
        db.session.commit()
    # 查询数据
    authors = Author.query.all()
    return render_template("index.html", authors=authors, form=form)
@app.route("/deleteBook", methods=["POST"])
def delete_book():
    """删除书本数据
    接收json格式的数据 contentType: application/json
    """
    data = request.json
    book_id = data.get("bookId")
    book = Book.query.get(book_id)
    db.session.delete(book)
    db.session.commit()
    data = {
        "code": 0,
        "message": "delete success"
    }
    return jsonify(data)
@app.route("/deleteAuthor")
def delete_author():
    """删除作者书籍"""
    author_id = request.args.get("authorId")
    author = Author.query.get(author_id)
    db.session.delete(author)
    db.session.commit()
    return redirect(url_for("index"))
if __name__ == '__main__':
    # db_init()
    app.run(debug=True)

3、index.html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!-- 显示表单 -->
<form action="/" method="post">
    {{ form.csrf_token }}
    {{ form.author_name.label }}
    {{ form.author_name }}
    {% for msg in form.author_name.errors %}
        {{ msg }}
    {% endfor %}
    {{ form.book_name.label }}
    {{ form.book_name }}
    {% for msg in form.book_name.errors %}
        {{ msg }}
    {% endfor %}
    {{ form.submit }}
</form>
<hr/>
<!-- 显示作者书籍 -->
<ul>
    {% for author in authors %}
        <li>
            作者:{{ author.name }} <a href="/deleteAuthor?authorId={{ author.id }}">删除</a>
            <ul>
                {% for book in author.books %}
                    <li>书籍:{{ book.name }} <a href="javascript:" onclick="deleteBook({{ book.id }})">删除</a></li>
                {% endfor %}
            </ul>
        </li>
    {% endfor %}
</ul>
<script type="text/javascript" src="/static/js/jquery-3.3.1.min.js"></script>
<script>
    function deleteBook(bookId) {
        var data = {
            bookId: bookId
        };
        // 向后端发送json格式数据
        $.ajax({
            url: "/deleteBook", // 请求url
            type: "post", // 请求方式
            data: JSON.stringify(data), //向后端发送的请求体数据,将js对象转为json字符串
            contentType: "application/json",//向后端发送的数据格式
            dataType: "json", // 后端返回的数据格式
            success: function (result) {
                if (result.code === 0) {
                    location.href = "/";
                }
            }
        })
    }
</script>
</body>
</html>

显示效果

image.png

相关文章
|
2天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
19 1
|
2天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
11 1
Flask框架在Python面试中的应用与实战
|
3天前
|
数据安全/隐私保护 Python
Python Flask-Mail实现邮件发送
Python Flask-Mail实现邮件发送
|
6天前
|
存储 机器学习/深度学习 数据可视化
Python面板时间序列数据预测:格兰杰因果关系检验Granger causality test药品销售实例与可视化
Python面板时间序列数据预测:格兰杰因果关系检验Granger causality test药品销售实例与可视化
49 6
|
6天前
|
机器学习/深度学习 数据可视化 算法
PYTHON用决策树分类预测糖尿病和可视化实例
PYTHON用决策树分类预测糖尿病和可视化实例
15 0
|
6天前
|
算法 数据可视化 Python
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
11 0
|
7天前
|
缓存 监控 数据库
Flask性能优化:打造高性能Web应用
【4月更文挑战第16天】本文介绍了提升Flask应用性能的七大策略:优化代码逻辑,减少数据库查询,使用WSGI服务器(如Gunicorn、uWSGI),启用缓存(如Flask-Caching),优化数据库操作,采用异步处理与并发(如Celery、Sanic),以及持续监控与调优。通过这些手段,开发者能有效优化Flask应用,适应大型或高并发场景,打造高性能的Web服务。
|
7天前
|
监控 安全 数据库
Flask应用部署指南:从开发到生产环境
【4月更文挑战第16天】本文是Flask应用从开发到生产的部署指南,涵盖开发环境准备、应用开发、部署方案选择、生产环境配置、应用部署、监控与维护。确保安装Python、Flask及依赖库,使用文本编辑器或IDE编写代码,关注应用安全与性能。选择WSGI服务器、Docker或云服务平台部署,配置生产环境,确保安全性,然后部署应用并进行监控维护,定期更新修复问题,保证应用稳定运行。
|
7天前
|
JSON 安全 API
Flask-Login与Flask-RESTful:扩展你的应用功能
【4月更文挑战第16天】本文介绍了两个实用的Flask扩展——Flask-Login和Flask-RESTful。Flask-Login提供用户认证和会话管理,简化了登录、注销和保护路由的逻辑。而Flask-RESTful则助力构建RESTful API,支持多种HTTP方法和请求解析。通过这两个扩展,开发者能轻松增强Flask应用的功能性,实现安全的用户认证和高效的API交互。
|
8天前
|
Python
python学习12-类对象和实例对象
python学习12-类对象和实例对象