diff --git a/基本结构/042 restful/tf-35-app.py b/基本结构/042 restful/tf-35-app.py new file mode 100644 index 0000000..661e7de --- /dev/null +++ b/基本结构/042 restful/tf-35-app.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +from flask import Flask, request, jsonify, abort +from functools import lru_cache +from cppy.cp_util import * +from functools import cache + +app = Flask(__name__) + +# 模拟数据库 +books_db = [] + +# 用于缓存用户数据库的装饰器 +@lru_cache(maxsize=None) +def get_books_db(): + return books_db + +#查询所有资源 +@app.route('/books', methods=['GET']) +def get_books(): + return jsonify(get_books_db()) + +#查询某个资源 +@app.route('/books/', methods=['GET']) +def get_book(book_id): + book = next((book for book in get_books_db() if book['id'] == book_id), None) + if book is None: + abort(404) + return jsonify(book['content']) + + +# 创建或更新新资源 +@app.route('/books/', methods=['PUT']) +def update_book(book_id): + global books_db + book_to_update = request.json + print(book_to_update) + books_db = get_books_db() + + book = next((book for book in books_db if book['id'] == book_id), None) + + if book is None: + # 如果资源不存在,创建新资源 + books_db.append(book_to_update) + else: + # 如果资源存在,更新资源 + book.update(book_to_update) + # 清除缓存的数据库 + cache.delete(get_books_db) + + return jsonify(books_db), 200 + +#操作一个资源 +@app.route('/books//word_frequency', methods=['GET']) +def word_frequency(book_id): + global books_db + book = next((book for book in get_books_db() if book['id'] == book_id), None) + filepath = book['content'] + word_list = extract_file_words(filepath) + word_frequency = get_frequencies(word_list) + word_frequency = sort_dict(word_frequency) + print_word_freqs(word_frequency) + return jsonify(word_frequency), 200 + +@app.route('/books/', methods=['DELETE']) +def delete_book(book_id): + global books_db + books_db = [book for book in books_db if book['id'] != book_id] + + if len(books_db) == len([l for l in books_db if l['id'] == book_id]): + abort(404) # 用户不存在 + + return jsonify({'message': f'book {book_id} deleted'}), 200 + +if __name__ == '__main__': + app.run(debug=True) +