首页 > 其他分享 >flask后端分离

flask后端分离

时间:2023-10-19 09:22:08浏览次数:27  
标签:name get flask app 分离 db book 后端 id

一个简易demo

目录如下:

app.py

# app.py
from flask import Flask, request
from flask.views import MethodView
from extension import db,cors
from models import Book



app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///books.sqlite'  # 使用SQLite数据库,也可使用其他数据库
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  #禁止追踪
db.init_app(app)
cors.init_app(app)

@app.route('/')
def hello_world():
    return 'hello world'


@app.cli.command()  # 自定义命令 create  / flask create
def create():
    db.drop_all()  # 旧的数据表删除
    db.create_all() # 创建新的数据表
    Book.init_db() # 初始化数据


class BookApi(MethodView):
    def get(self, book_id):
        if not book_id:
            books: [Book] = Book.query.all()
            results = [
                {
                    'id': book.id,
                    'book_name': book.book_name,
                    'book_type': book.book_type,
                    'book_prize': book.book_prize,
                    'book_number': book.book_number,
                    'book_publisher': book.book_publisher,
                    'author': book.author
                } for book in books
            ]
            return {
                'status': 'success',
                'message': '数据查询成功',
                'results': results
            }
        book: [Book] = Book.query.get(book_id)
        return {
            'status': 'success',
            'message': '数据查询成功',
            'results': {
                'id': book.id,
                'book_name': book.book_name,
                'book_type': book.book_type,
                'book_prize': book.book_prize,
                'book_number': book.book_number,
                'book_publisher': book.book_publisher,
                'author': book.author
            }
        }

    def post(self):
        form = request.json
        book = Book()
        book.book_number = form.get('book_number')
        book.book_name = form.get('book_name')
        book.book_type = form.get('book_type')
        book.book_prize = form.get('book_prize')
        book.author = form.get('author')
        book.book_publisher = form.get('book_publisher')
        db.session.add(book)
        db.session.commit()

        return {
            'status': 'success',
            'message': '数据添加成功'
        }

    def delete(self, book_id):
        book = Book.query.get(book_id)
        db.session.delete(book)
        db.session.commit()
        return {
            'status': 'success',
            'message': '数据删除成功'
        }

    def put(self, book_id):
        book: Book = Book.query.get(book_id)
        book.book_number = request.json.get('book_number')
        book.book_name = request.json.get('book_name')
        book.book_type = request.json.get('book_type')
        book.book_prize = request.json.get('book_prize')
        book.author = request.json.get('author')
        book.book_publisher = request.json.get('book_publisher')
        db.session.commit()
        return {
            'status': 'success',
            'message': '数据修改成功'
        }



book_view = BookApi.as_view('book_api')
app.add_url_rule('/books/',defaults={'book_id': None},
                 view_func=book_view, methods=['GET', ])
app.add_url_rule('/books/',view_func=book_view, methods=['POST', ])
app.add_url_rule("/books/<int:book_id>",
                 view_func=book_view, methods=['GET', 'PUT', 'DELETE'])



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

extension.py

from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS # 跨域请求伪造

db = SQLAlchemy()
cors = CORS()

models.py

from extension import db


class Book(db.Model):
    __tablename = 'book'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    book_number = db.Column(db.String(255), nullable=False)
    book_name = db.Column(db.String(255), nullable=False)
    book_type = db.Column(db.String(255), nullable=False)
    book_prize = db.Column(db.Float, nullable=False)
    author = db.Column(db.String(255))
    book_publisher = db.Column(db.String(255))

    @staticmethod
    def init_db():
        rets = [
            (1, '001', '活着', '小说', 39.9, '余华', '某某出版社'),
            (2, '002', '三体', '科幻', 99.8, '刘慈欣', '重庆出版社')
        ]
        for ret in rets:
            book = Book()
            book.id = ret[0]
            book.book_number = ret[1]
            book.book_name = ret[2]
            book.book_type = ret[3]
            book.book_prize = ret[4]
            book.author = ret[5]
            book.book_publisher = ret[6]
            db.session.add(book)
        db.session.commit()

标签:name,get,flask,app,分离,db,book,后端,id
From: https://www.cnblogs.com/code3/p/17773925.html

相关文章

  • Ajax前后端交互实例
    什么是前后端联调?在我们开发的过程中,发送请求的ajax数据都不是后端返回的真数据,而是我们自己通过接口mock模拟的假数据,当前端的代码编写完成后,后端的接口也写好后,我们就需要把mock数据换点,尝试使用后端提供的数据,进行一个前后端的调试,我们会把这个过程叫做前后端接口联调。  ......
  • 通过SQLserver系统存储过程分离和附加数据库的简单使用
    sp_detach_db 数据库分离sp_detach_db 是SQLServer中的一个系统存储过程,用于卸载数据库。使用这个存储过程可以使得数据库不再与当前SQLServer实例关联。以下是 sp_detach_db 的基本语法:sp_detach_db'database_name';其中 'database_name' 是要卸载的数据库的名......
  • Flask一个文件快速起一个API接口服务
    fromflaskimportFlask,request,jsonifyapp=Flask(__name__)@app.route('/my_endpoint',methods=['POST'])defhandle_post_request():#在这里可以处理接收到的POST请求数据data=request.get_json()#获取POST请求中的JSON数据#返回指定内容......
  • Spring Boot + K8S 中的滚动发布、优雅停机、弹性伸缩、应用监控、配置分离
    前言 K8s+SpringBoot实现零宕机发布:健康检查+滚动更新+优雅停机+弹性伸缩+Prometheus监控+配置分离(镜像复用) 配置 健康检查健康检查类型:就绪探针(readiness)+存活探针(liveness)探针类型:exec(进入容器执行脚本)、tcpSocket(探测端口)、httpGet(调用接口)业务层面项目......
  • 菜鸡go后端开发学习笔记1
        首先了解项目内容及对应的人员:重要的是产品以及前端。1、了解项目,理清逻辑,有什么不通顺的地方不清楚的地方及时的与产品进行沟通。2、在写请求时,主要是前端发送请求给到后端,后端通过逻辑处理获取数据库里面对应的数据,并返回数据。所以请求字段和前端是有交互......
  • 彻底搞懂:防止表单重复提交,前端限制还是后端限制?
    欢迎大家来到小米的技术分享专栏!今天我将为大家带来一个热门话题:如何有效地防止表单重复提交。在开发中,我们常常会遇到这样的问题:用户频繁点击提交按钮,导致数据重复提交,给系统和用户体验带来不必要的困扰。那么,在前端还是后端进行限制措施,哪个更好呢?让我们一起深入探讨。前端限制:防......
  • 关于flask-admin
    为什么无法改成中文?defcreate_app():app=Flask(__name__)babel=Babel(app)app.config['BABEL_DEFAULT_LOCALE']='zh_CN'app.config['LANGUAGES']=['zh_CN']app.config['SECRET_KEY']='......
  • PHP前后端分离开发框架
    项目介绍一款PHP语言基于ThinkPhp6.x+Vue+ElementUI等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本着简化开发、提升开发效率的初衷,目前框架已集成了完整的RBAC权限架构和常规基础模块,前端Vue端支持多主题......
  • Javaweb后端
    Javaweb后端目录Javaweb后端MavenHTTP请求响应请求(补充)xml文件分层解耦三层架构IOC/DI入门IoC控制反转DI依赖注入MySQL事务索引分页查询MyBatis快速入门数据库连接池Lombok增删改查删除新增查询条件查询xml映射文件动态sql案例部门管理分页查询文件上传阿里云OSS配置文件参数......
  • 前台端分离 技术架构 系统架构图 20231016
       ......