前端Vue接收后端flask发来的sqlite 数据库

前言

通过flask_sqlachemy 对sqlite数据库进行操作,并将得到的数据发送到前端vue,并由table 显示。

Sqlachemy数据库 配置 及创建

创建数据库python文件(DB.py)

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 

app = Flask(__name__) #创建flask 的app,注意这里如果建立,则flask 主程序中不能重复创建app,否则会报错
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///DB//ESR.db' #配置数据库的路径
db = SQLAlchemy(app) #获得数据库数据
class User(db.Model):
	#创建表格,指定主键和数据类型,并给出输出格式
    __tablename__ = 'ESRTable'
    id = db.Column(db.Integer, primary_key=True)
    caer = db.Column(db.String(80), nullable=False)
    pe = db.Column(db.String(
<think>好的,我现在需要帮助用户实现用户登录和注册功能,涉及前端Vue后端Python以及SQLite数据库的集成。首先,我需要理清整个流程,并确保各部分之间的连接正确。 用户提到的sqlilabs数据库可能是指SQLite,因为用户之前引用了sql-connections的配置,可能是一个笔误或者对SQLite的简称。所以这里假设使用SQLite数据库。接下来,我需要考虑如何搭建这三个部分。 首先,前端使用Vue。用户可能需要创建一个注册和登录的表单,通过axios发送HTTP请求到后端。需要处理表单验证,比如用户名和密码是否填写,密码是否符合要求等。然后,前端需要接收后端的响应,比如成功或失败的消息,并跳转到相应页面。 后端使用Python,可能选择Flask或Django框架。这里考虑到轻量级,可能用Flask更合适。后端需要处理来自前端的POST请求,验证用户输入的数据,比如检查用户名是否已存在,然后将新用户信息存储到数据库,或者验证登录信息是否正确。同时,需要与数据库进行交互,执行查询和插入操作。 数据库部分,使用SQLite的话,需要创建用户表,包含id、username、password等字段。密码需要加密存储,不能明文保存,所以需要用到哈希算法,比如bcrypt或者werkzeug的security模块来生成和验证密码哈希。 接下来需要考虑前后端的连接。前端Vue应用需要跨域请求后端API,因此后端需要配置CORS允许前端应用的域名或端口访问。在Flask中可以使用flask-cors扩展来处理。 然后,具体步骤可能包括: 1. 前端Vue项目搭建,安装必要的依赖,比如axios、bootstrap等。 2. 创建注册和登录组件,设计表单,处理表单提交事件。 3. 后端Flask应用搭建,创建路由处理注册和登录请求。 4. 配置数据库连接,创建用户模型,使用ORM(如SQLAlchemy)或直接执行SQL语句。 5. 实现密码的哈希存储和验证。 6. 测试整个流程,确保注册后能正确存储用户信息,登录时能验证成功或失败。 需要注意的是,用户之前提到的引用中有一个关于Vue依赖的问题,提到版本兼容性可能导致问题,所以需要确保安装的依赖版本兼容。比如Node.js和npm的版本,以及bootstrap的版本是否与Vue兼容。 另外,用户可能希望前后端分离,所以需要分别启动前端后端服务。前端通过npm run serve运行在某个端口(比如8080),后端Flask运行在另一个端口(比如5000),并配置代理或CORS。 在安全方面,除了密码哈希,还需要考虑防止SQL注入,但使用ORM通常可以避免这个问题。同时,可能需要使用HTTPS,但开发阶段可能暂时不需要。 测试时,可以使用Postman或curl测试后端API是否正常工作,再结合前端进行集成测试。 总结步骤,可能需要分部分详细说明,并确保代码示例正确,比如Vue组件的方法、Flask的路由和数据库操作。同时,引用之前提到的内容,比如配置数据库时参考引用[1]中的db-creds.inc,虽然这里可能使用SQLite不需要用户名密码,但可能需要配置数据库路径。或者可能用户实际想用MySQL,需要确认,但根据问题描述中的sqlilabs,可能还是SQLite。 可能遇到的错误包括跨域问题、数据库连接失败、密码哈希不一致等,需要逐步排查。 最后,生成相关问题,比如如何实现密码重置、如何添加验证码、如何保持用户会话等。</think>### 分步实现方案 #### 一、环境准备 1. **前端环境**:确保安装 Node.js (v16+)、npm 及 Vue CLI ```bash npm install -g @vue/cli vue create vue-auth-frontend cd vue-auth-frontend npm install axios bootstrap-vue ``` 2. **后端环境**:创建 Python 虚拟环境并安装 Flask 和相关库 ```bash pip install flask flask-sqlalchemy flask-cors bcrypt ``` 3. **数据库准备**:配置 SQLite 数据库(默认生成 `instance/database.db`) --- #### 二、前端实现(Vue) 1. **创建登录/注册组件** ```vue <!-- Login.vue --> <template> <div> <input v-model="username" placeholder="用户名"> <input v-model="password" type="password" placeholder="密码"> <button @click="login">登录</button> </div> </template> <script> import axios from 'axios'; export default { data() { return { username: '', password: '' } }, methods: { async login() { try { const res = await axios.post('http://localhost:5000/api/login', { username: this.username, password: this.password }); alert(res.data.message); } catch (err) { alert('登录失败'); } } } } </script> ``` 2. **配置跨域请求** 在 `vue.config.js` 中添加代理配置: ```js module.exports = { devServer: { proxy: 'http://localhost:5000' } } ``` --- #### 三、后端实现(Python Flask) 1. **初始化 Flask 应用** ```python from flask import Flask, request, jsonify from flask_sqlalchemy import SQLAlchemy from flask_cors import CORS import bcrypt app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False CORS(app) db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True) password_hash = db.Column(db.String(120)) @app.before_first_request def create_tables(): db.create_all() ``` 2. **实现注册/登录接口** ```python @app.route('/api/register', methods=['POST']) def register(): data = request.get_json() username = data.get('username') password = data.get('password') if User.query.filter_by(username=username).first(): return jsonify({'message': '用户已存在'}), 400 hashed_pw = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()) new_user = User(username=username, password_hash=hashed_pw.decode('utf-8')) db.session.add(new_user) db.session.commit() return jsonify({'message': '注册成功'}), 201 @app.route('/api/login', methods=['POST']) def login(): data = request.get_json() user = User.query.filter_by(username=data['username']).first() if user and bcrypt.checkpw(data['password'].encode('utf-8'), user.password_hash.encode('utf-8')): return jsonify({'message': '登录成功'}) return jsonify({'message': '用户名或密码错误'}), 401 ``` --- #### 四、数据库集成 1. **启动时自动创建数据库** 运行 Flask 应用时会自动生成 SQLite 数据库文件: ```bash flask run ``` --- #### 五、测试流程 1. 启动后端服务:`flask run` 2. 启动前端服务:`npm run serve` 3. 访问 `http://localhost:8080` 测试注册和登录功能 --- ### 关键技术点说明 1. **密码安全**:使用 `bcrypt` 进行哈希处理,避免明文存储密码[^1] 2. **跨域处理**:通过 `flask-cors` 实现前后端分离架构的跨域访问 3. **ORM 映射**:使用 `flask-sqlalchemy` 简化数据库操作,防止 SQL 注入[^2]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值