编程猫帖子助手后端主程序v0.1.4.20230717 - Flask & SQLite 实现帖子管理
import hashlib\nimport json\nimport sqlite3\nimport time\n\nimport flask\nfrom flask_cors import CORS\n\napp = flask.Flask('CodemaoForumHelper')\napp.debug = True # TODO\nCORS(app, supports_credentials=True)\n\n\ndef create_table():\n conn = sqlite3.connect('data.db')\n cur = conn.cursor()\n cur.execute('''\n CREATE TABLE IF NOT EXISTS data (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n title VARCHAR(50),\n token VARCHAR(42),\n type INTEGER,\n time INTEGER,\n like INTEGER DEFAULT 0,\n comments TEXT DEFAULT '[]'\n )\n ''')\n conn.commit()\n cur.close()\n conn.close()\n\n\ndef get_forum_by_id(id_):\n conn = sqlite3.connect('data.db')\n cur = conn.cursor()\n cur.execute('SELECT * FROM data WHERE id = ?', (id_,))\n data = cur.fetchone()\n cur.close()\n conn.close()\n return data or None\n\n\ndef get_forum_by_token(token):\n conn = sqlite3.connect('data.db')\n cur = conn.cursor()\n cur.execute('SELECT * FROM data WHERE token = ?', (token,))\n data = cur.fetchone()\n cur.close()\n conn.close()\n return data or None\n\n\ndef new_forum(title, type_):\n conn = sqlite3.connect('data.db')\n cur = conn.cursor()\n token = hashlib.md5(title.encode()).hexdigest() + str(int(time.time()))\n cur.execute('INSERT INTO data (title, token, type, time) VALUES (?, ?, ?, ?)',\n (title, token, type_, time.time()))\n conn.commit()\n cur.close()\n conn.close()\n return token\n\n\n# print(new_forum('111', 1))\n\ndef update_forum(token, title, type_):\n conn = sqlite3.connect('data.db')\n cur = conn.cursor()\n cur.execute('UPDATE data SET (title, type, time) = (?, ?, ?) WHERE token = ?',\n (title, type_, time.time(), token))\n conn.commit()\n cur.close()\n conn.close()\n\n\ndef del_forum(token):\n conn = sqlite3.connect('data.db')\n cur = conn.cursor()\n cur.execute('DELETE FROM data WHERE token = ?', (token,))\n conn.commit()\n cur.close()\n conn.close()\n\n\n@app.route('/forum/int:id_', methods=['GET'])\n def forum_get(id_):\n with open('forum_read.html', encoding='utf-8') as file:\n return file.read()\n\n\n@app.route('/forum/data/int:id_', methods=['GET'])\n def forum_data_get(id_):\n data = get_forum_by_id(id_)\n if data is None:\n return '帖子在数据库中不存在(error-F0001)'\n try:\n with open('/forums/' + data[2], encoding='utf-8') as file:\n return file.read()\n except FileNotFoundError:\n return '帖子存在,但是找不到帖子对应的内容(error-B0001)', 404\n\n\n@app.route('/forum/info/int:id_', methods=['GET'])\n def forum_info_get(id_):\n data = get_forum_by_id(id_)\n if data is None:\n return '帖子在数据库中不存在(error-F0001)'\n return json.dumps(data)\n\n\n@app.route('/forum/create', methods=['POST'])\n def create_forum():\n flask.request.form = json.loads(flask.request.data.decode())\n token = new_forum(flask.request.form['title'], flask.request.form['type'])\n with open('/forums/' + token, 'w') as file:\n file.write(flask.request.form['data'])\n return str(get_forum_by_token(token)[0]) + ' ' + token, 201\n\n\n@app.route('/forum/update/data', methods=['POST'])\n def update_forum_data():\n flask.request.form = json.loads(flask.request.data.decode())\n data = get_forum_by_id(flask.request.form['id'])\n if data is None:\n return '帖子在数据库中不存在(error-F0001)', 404\n elif data[2] != flask.request.form['token']:\n return '帖子的token错误(error-F0002)', 401\n if flask.request.form.get('data') is not None:\n with open('/forums/' + data[2], 'w') as file:\n file.write(flask.request.form['data'])\n update_forum(data[2], data[1], data[3])\n return '更改成功(success-0001)', 201\n\n\n@app.route('/forum/update/info', methods=['POST'])\n def update_forum_info():\n flask.request.form = json.loads(flask.request.data.decode())\n data = get_forum_by_id(flask.request.form['id'])\n if data is None:\n return '帖子在数据库中不存在(error-F0001)', 404\n elif data[2] != flask.request.form['token']:\n return '帖子的token错误(error-F0002)', 401\n update_forum(data[2], flask.request.form['title'], flask.request.form['type'])\n return '更改成功(success-0001)', 201\n\n\n@app.route('/forum/delete', methods=['POST'])\n def delete_forum():\n flask.request.form = json.loads(flask.request.data.decode())\n data = get_forum_by_id(flask.request.form['id'])\n if data is None:\n return '帖子在数据库中不存在(error-F0001)', 404\n elif data[2] != flask.request.form['token']:\n return '帖子的token错误(error-F0002)', 401\n del_forum(data[2])\n return '删除成功(success-0002)', 201\n\n\ncreate_table()\n\napp.run() # TODO\n\n这段flask(python)代码,sqlite没法用内容:这段代码使用了Flask框架和SQLite数据库。它实现了一个简单的帖子助手后端程序,可以创建、更新和删除帖子,并提供帖子的详细信息和内容获取。\n\n主要函数和路由说明:\n- create_table():创建SQLite数据库表格。\n- get_forum_by_id(id_):根据帖子ID从数据库中获取帖子信息。\n- get_forum_by_token(token):根据帖子token从数据库中获取帖子信息。\n- new_forum(title, type_):创建新帖子,并将信息插入数据库。\n- update_forum(token, title, type_):更新帖子信息。\n- del_forum(token):从数据库中删除帖子。\n- forum_get(id_):获取帖子页面的HTML代码。\n- forum_data_get(id_):获取帖子的内容。\n- forum_info_get(id_):获取帖子的详细信息。\n- create_forum():创建新帖子的路由。\n- update_forum_data():更新帖子内容的路由。\n- update_forum_info():更新帖子信息的路由。\n- delete_forum():删除帖子的路由。\n\n你提到的SQLite无法使用可能是因为代码中使用相对路径打开数据库文件,而实际运行环境中不存在该文件。你可以尝试修改数据库文件路径,或者手动创建一个名为"data.db"的SQLite数据库文件并放置在代码所在的目录中。\n\n另外,代码中的print(new_forum('111', 1))语句应该是为了测试new_forum()函数的返回值,可以暂时注释掉或删除。\n\n最后,使用app.run()启动Flask应用时,可以指定主机和端口,如app.run(host='0.0.0.0', port=5000)。
原文地址: https://www.cveoy.top/t/topic/pX1s 著作权归作者所有。请勿转载和采集!