四 后端:Flask+数据库Sqlite

四 后端:Flask+数据库Sqlite

环境配置

pip install flask-sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install SQLAlchemy-serializer -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install flask_cors  -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install flask-migrate -i https://pypi.tuna.tsinghua.edu.cn/simple

restful.py

from flask import jsonify
# 状态码
class HttpCode(object):
  # 响应正常
  ok = 200
  # 客户端参数错误
  paramserror = 400
  # 服务器错误
  servererror = 500


# 字典转字符串
def _restful_result(code, message, data):
  return jsonify({"message": message or "", "data": data or {}, "code": code})


# 返回ok及结果数据
def ok(message=None, data=None):
  return _restful_result(code=HttpCode.ok, message=message, data=data)


# 客户端错误
def params_error(message="参数错误!"):
  return _restful_result(code=HttpCode.paramserror, message=message, data=None)


# 服务器错误 
def server_error(message="服务器开小差啦!"):
  return _restful_result(code=HttpCode.servererror, message=message or '服务器内部错误', data=None)

flask_app.py

from flask import Flask, request,render_template
from exts import db
from flask_cors import CORS
import config
from flask_migrate import Migrate
# 发生关联
from models import ModelInfo
# flask实例
app = Flask(__name__,static_folder='./dist',  template_folder = "./dist",static_url_path="" )
# 导入配置文件(数据库配置参数)
app.config.from_object(config)
# 数据库绑定app
db.init_app(app)
# 将模型映射到数据库
migrate = Migrate(app,db)
# 跨域访问
CORS(app,resources=r'/*')




@app.route("/ai/api/add",methods=['GET','POST'])
def addModel():
    pass

@app.route("/ai/api/getAiModelList",methods=['GET','POST'])
def getAiModelList():
    pass

@app.route("/ai/api/delete",methods=['GET','POST'])
def deleteModel():
    id = request.form.get("id")
    return "ok"


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

exts.py

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

config.py

# 数据库配置
SQLALCHEMY_DATABASE_URI = "sqlite:///" + r"D:\workplace\PycharmProjects\TestFlaskVue\myDataBase.db" # 数据库存放位置
SQLALCHEMY_TRACK_MODIFICATIONS = False
SECRET_KEY = "jumy"

models.py

from exts import db
from sqlalchemy_serializer import SerializerMixin


class ModelInfo(db.Model, SerializerMixin):
    __tablename__ = "modelInfo"
    id = db.Column(db.Integer, primary_key=True)  # 主键
    algoCategory = db.Column(db.Text)
    task = db.Column(db.Text)
    imgsz = db.Column(db.Text)
    device = db.Column(db.Text)
    modelPath = db.Column(db.Text)
    initModelFlag = db.Column(db.Text)
    def __str__(self):
        return "<ModelInfo(algoCategory:%s)>" %(self.algoCategory)
# 设置环境变量FLASK_APP为当前主函数名称
set FLASK_APP=flask_app.py
# 初始化迁移仓库
flask db init
# 生成迁移脚本
flask db migrate
# 执行脚本中的upgrade操作,真正完成数据的产生
flask db upgrade
flask db init

在这里插入图片描述
在这里插入图片描述

# 生成迁移脚本
flask db migrate

在这里插入图片描述

# 执行脚本中的upgrade操作,真正完成数据的产生
flask db upgrade

在这里插入图片描述

使用Navicat 进行查看

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个简单的 Python Flask + Vue.js + SQLite 实现用户注册、登录和下载文件的示例,其中前端使用了 Vue.js,后端使用了 Flask数据库使用了 SQLite后端代码: ```python from flask import Flask, jsonify, request, send_file from werkzeug.security import check_password_hash, generate_password_hash import sqlite3 app = Flask(__name__) app.config["DEBUG"] = True # SQLite database conn = sqlite3.connect('users.db') conn.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL, password TEXT NOT NULL);''') conn.close() # User registration @app.route('/api/register', methods=['POST']) def register(): username = request.json.get('username') password = request.json.get('password') if not username or not password: return jsonify({'error': 'Missing username or password'}) conn = sqlite3.connect('users.db') cursor = conn.cursor() cursor.execute('SELECT * FROM users WHERE username=?', (username,)) if cursor.fetchone(): return jsonify({'error': 'Username already exists'}) cursor.execute('INSERT INTO users (username, password) VALUES (?, ?)', (username, generate_password_hash(password))) conn.commit() conn.close() return jsonify({'success': 'User created successfully'}) # User login @app.route('/api/login', methods=['POST']) def login(): username = request.json.get('username') password = request.json.get('password') if not username or not password: return jsonify({'error': 'Missing username or password'}) conn = sqlite3.connect('users.db') cursor = conn.cursor() cursor.execute('SELECT * FROM users WHERE username=?', (username,)) user = cursor.fetchone() if not user or not check_password_hash(user[2], password): return jsonify({'error': 'Invalid username or password'}) conn.close() return jsonify({'success': 'User logged in successfully'}) # File download @app.route('/api/download', methods=['GET']) def download(): filename = request.args.get('filename') if not filename: return jsonify({'error': 'Missing filename'}) try: return send_file(filename, as_attachment=True) except FileNotFoundError: return jsonify({'error': 'File not found'}) ``` 前端代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>File Downloader</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> </head> <body> <div id="app"> <h2>File Downloader</h2> <div v-if="!loggedIn"> <h3>Register</h3> <div> <label>Username:</label> <input type="text" v-model="registerUsername"> </div> <div> <label>Password:</label> <input type="password" v-model="registerPassword"> </div> <button @click="register">Register</button> <div v-if="registerError" style="color: red">{{ registerError }}</div> <hr> <h3>Login</h3> <div> <label>Username:</label> <input type="text" v-model="loginUsername"> </div> <div> <label>Password:</label> <input type="password" v-model="loginPassword"> </div> <button @click="login">Login</button> <div v-if="loginError" style="color: red">{{ loginError }}</div> </div> <div v-else> <h3>Download File</h3> <div> <label>Filename:</label> <input type="text" v-model="filename"> </div> <button @click="download">Download</button> <div v-if="downloadError" style="color: red">{{ downloadError }}</div> <div v-if="downloadSuccess" style="color: green">{{ downloadSuccess }}</div> <hr> <button @click="logout">Logout</button> </div> </div> <script> new Vue({ el: '#app', data: { registerUsername: '', registerPassword: '', loginUsername: '', loginPassword: '', filename: '', registerError: '', loginError: '', downloadError: '', downloadSuccess: '', loggedIn: false }, methods: { register: function () { axios.post('/api/register', { username: this.registerUsername, password: this.registerPassword }).then(response => { if (response.data.error) { this.registerError = response.data.error; } else { this.registerUsername = ''; this.registerPassword = ''; this.registerError = ''; this.loginUsername = response.data.username; this.loginPassword = ''; this.loginSuccess = response.data.success; this.loggedIn = true; } }); }, login: function () { axios.post('/api/login', { username: this.loginUsername, password: this.loginPassword }).then(response => { if (response.data.error) { this.loginError = response.data.error; } else { this.loginUsername = ''; this.loginPassword = ''; this.loginError = ''; this.loginSuccess = response.data.success; this.loggedIn = true; } }); }, download: function () { axios.get('/api/download', { params: { filename: this.filename } }).then(response => { if (response.data.error) { this.downloadError = response.data.error; this.downloadSuccess = ''; } else { this.downloadError = ''; this.downloadSuccess = 'File downloaded successfully'; } }); }, logout: function () { this.loggedIn = false; this.filename = ''; this.downloadError = ''; this.downloadSuccess = ''; } } }) </script> </body> </html> ``` 在此示例中,用户可以在前端页面中输入用户名和密码进行注册和登录,后端将这些信息存储在 SQLite 数据库中,然后用户可以输入文件名进行下载,后端将下载文件发送回前端。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值