小明: 嘿,小李,我最近在做一个校友系统的网页版,但是一直卡在后端数据交互上。
小李: 哦?你用的是什么技术栈呢?
小明: 我打算用Python的Flask框架,后端连接MySQL数据库。
小李: 那不错啊,Flask轻量级且灵活,适合快速开发。首先你需要设计数据库结构。
小明: 好的,我打算创建两个表:User
(用户信息)和Alumni
(校友信息)。
-- MySQL Script --
CREATE TABLE User (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100)
);
CREATE TABLE Alumni (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
graduation_year YEAR,
major VARCHAR(100),
FOREIGN KEY (user_id) REFERENCES User(id)
);
小李: 接下来是Flask部分,我们先写路由处理用户登录请求。
-- app.py --
from flask import Flask, request, jsonify
from flask_mysqldb import MySQL
app = Flask(__name__)
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = ''
app.config['MYSQL_DB'] = 'alumni_system'
mysql = MySQL(app)
@app.route('/login', methods=['POST'])
def login():
data = request.get_json()
username = data['username']
password = data['password']
cur = mysql.connection.cursor()
cur.execute("SELECT * FROM User WHERE username=%s AND password=SHA2(%s, 256)", (username, password))
user = cur.fetchone()
cur.close()
if user:
return jsonify({'success': True, 'userId': user[0]})
else:
return jsonify({'success': False})
小李: 这样后端就完成了,前端可以用HTML+JS来展示校友信息。
-- alumni.html --
$(document).ready(function(){
$.ajax({
url: '/alumni',
method: 'GET',
success: function(data){
$('#alumniList').append('' + data.alumniName + '');
}
});
});
小李: 如果数据量很大,可以考虑对SQL查询进行索引优化。
-- MySQL Indexing --
ALTER TABLE User ADD INDEX idx_username(username);
ALTER TABLE Alumni ADD INDEX idx_user_id(user_id);
小明: 太感谢了!现在我明白了如何搭建整个系统。
]]>