FLASK+VUE+sqlite3实现前后端分离框架

B站视频课复现

1. sqlite3实现简单的数据库,并完成python调用

在python上调用API的教程SQLite – Python | 菜鸟教程

实用的操作方式是ubuntu下的可视化工具sqlitebrowser

安装步骤

sudo add-apt-repository -y ppa:linuxgndu/sqlitebrowser

sudo apt-get update

sudo apt-get install sqlitebrowser

安装完后运行sqlitebrowser, 可视化直接编辑数据库表格

建表并填入数据

vscode有支持sqlite插件,可以直接查看数据库表格内容

可以确认数据表内容,但好像并不能修改

2. FLASK编写API后台服务

测试python接口sqlite3

import sqlite3

def books():
    try:
        conn=sqlite3.connect("./books.db")
        conn.row_factory=sqlite3.Row
        print(conn)
    except Exception as e:
        print("db connection error.",e)
    # print(conn.row_factory)
    cur=conn.cursor()
    sql="SELECT * FROM books"
    rows=cur.execute(sql).fetchall()
    for row in rows:
        print(dict(row))
    rows=[dict(row) for row in rows]
    return jsonify(rows)

打印结果

<sqlite3.Connection object at 0x7f5460fab570>
{'id': 1, 'title': 'book1', 'author': 'autuor1', 'price': 1.0}
{'id': 2, 'title': 'book2', 'author': 'author2', 'price': 2.0}


完整框架

from flask import Flask, jsonify,render_template
from flask_cors import CORS
app = Flask(__name__)
# CORS(app)
import os
os.chdir("/home/hy/frontend/flask-vue/flask-sample")
@app.route('/', methods=['GET'])
def home():
    return render_template("index.html",title="测试页面")

def ping_pong():
    return jsonify('Hello World!')     #(jsonify返回一个json格式的数据)
@app.route("/api/books")
def books():
    try:
        conn=sqlite3.connect("./books.db")
        conn.row_factory=sqlite3.Row
        print(conn)
    except Exception as e:
        print("db connection error.",e)
    # print(conn.row_factory)
    cur=conn.cursor()
    sql="SELECT * FROM books"
    rows=cur.execute(sql).fetchall()
    for row in rows:
        print(dict(row))
    rows=[dict(row) for row in rows]
    return jsonify(rows)

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

前端访问 ip:port/api/books, 返回json数据包

3. VUE脚步实现前端

1)引用vue资源脚本

2)编写列表呈现方式

需要注意的是{{}}的用法在html和vue中有冲突,所以需要重新指定

delimiters:["[[","]]"],

3)编写调用后端API脚本

http调用的get方法调用上面flask写好的API接口

完整的代码

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width,intial-scal=1.0">
        <title>FLASK-VUE dev</title>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script src="https://cdn.jsdelivr.net/npm/vue-resource@1.5.1"></script>
    </head>
    <boad>
        <div id="app">
            <h1>FLASK-VUE {{title}}</h1>
            <table border="1" cellpadding=5>
                <tr>
                    <td># </td>
                    <td>标题</td>
                    <td>作者</td>
                    <td>定价</td>
                </tr>
                <tr v-for="book in books">
                    <td>[[book.id]]</td>
                    <td>[[book.title]]</td>
                    <td>[[book.author]]</td>
                    <td>[[book.price]]</td>
                </tr>
            </table>
        </div>

        <script>
    var app= new Vue({
        el:"#app",
        data:{
        books:[]
        },
        mounted:function(){
                this.fetchData()
                },
        delimiters:["[[","]]"],
        methods:{
            fetchData(){
                    this.$http.get("/api/books").then(rsp=>{
                    this.books =rsp.body
                    },err=>{console.log("error")});
            }
        }

        });


</script>
    </boad>
</html>

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海里的鱼2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值