from flask import Flask, flash, request, session, render_template, jsonify
import decimal
import service.users_data as user_service
import service.notice_data as notice_data
import service.slog_data as slog_data
import service.goods_data as goods_data
import service.category_data as category_data
import service.view_data as view_data
import service.version_data as version_data
import machine_learning.goods_predict as gp
from spider import shopping_spider
from concurrent.futures import ThreadPoolExecutor
import os
class JSONEncoder(flask.json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
return float(o)
super(JSONEncoder, self).default(o)
class FlaskApp(Flask):
json_encoder = JSONEncoder
app = Flask(__name__)
app.config['SESSION_TYPE'] = 'filesystem'
app.config['SECRET_KEY'] = os.urandom(24)
@app.route('/')
def main_page():
return render_template("main.html")
@app.route('/login', methods=['POST'])
def login():
if request.method == 'POST':
account = request.form.get('account')
password = request.form.get('password')
if not all([account, password]):
flash('参数不完整')
return "300"
res = user_service.get_user(account, password)
if res and res[0][0] > 0:
session['is_login'] = True
session['role'] = res[0][1]
return "200"
else:
return "300"
@app.route('/version/add', methods=["POST"])
def sys_version_add():
get_data = request.form.to_dict()
name = get_data.get('name')
version = get_data.get('version')
return version_data.add_sys_version(name, version)
@app.route('/version/edit', methods=["PUT"])
def version_edit():
get_data = request.form.to_dict()
id_val = get_data.get('id')
name = get_data.get('name')
version = get_data.get('version')
version_data.edit_sys_version(id_val, name, version)
return '200'
@app.route('/version/delete', methods=["DELETE"])
def version_delete():
get_data = request.form.to_dict()
id_val = get_data.get('id')
version_data.del_sys_version(id_val)
return '200'
@app.route('/html/category')
def category_manager():
return render_template('html/category.html')
@app.route('/category/list', methods=["POST"])
def category_list():
get_data = request.form.to_dict()
page_size = get_data.get('page_size')
page_no = get_data.get('page_no')
param = get_data.get('param')
data, count, page_list, max_page = category_data.get_category_list(int(page_size), int(page_no), param)
return jsonify({"data": data, "count": count, "page_no": page_no, "page_list": page_list, "max_page": max_page})
@app.route('/category/add', methods=["POST"])
def category_add():
get_data = request.form.to_dict()
content = get_data.get('content')
return category_data.add_category(content)
@app.route('/category/edit', methods=["PUT"])
def category_edit():
get_data = request.form.to_dict()
id_val = get_data.get('id')
content = get_data.get('content')
category_data.edit_category(id_val, content)
return '200'
@app.route('/category/delete', methods=["DELETE"])
def category_delete():
get_data = request.form.to_dict()
id_val = get_data.get('id')
category_data.del_category(id_val)
return '200'
@app.route('/spider/start', methods=["POST"])
def run_spider():
get_data = request.form.to_dict()
key = get_data.get('key')
total_pages = get_data.get('num')
executor = ThreadPoolExecutor(2)
executor.submit(shopping_spider.spider(key, total_pages))
return '200'
@app.route('/html/slog')
def slog_manager():
return render_template('html/slog.html')
@app.route('/slog/list', methods=["POST"])
def slog_list():
get_data = request.form.to_dict()
page_size = get_data.get('page_size')
page_no = get_data.get('page_no')
param = get_data.get('param')
data, count, page_list, max_page = slog_data.get_slog_list(int(page_size), int(page_no), param)
return jsonify({"data": data, "count": count, "page_no": page_no, "page_list": page_list, "max_page": max_page})
@app.route('/slog/edit', methods=["PUT"])
def slog_edit():
get_data = request.form.to_dict()
id_val = get_data.get('id')
log = get_data.get('log')
slog_data.edit_slog(id_val, log)
return '200'
@app.route('/slog/delete', methods=["DELETE"])
def slog_delete():
get_data = request.form.to_dict()
id_val = get_data.get('id')
slog_data.del_slog(id_val)
return '200'
@app.route('/html/goods')
def goods_manager():
return render_template('html/goods.html')
@app.route('/goods/list', methods=["POST"])
def goods_list():
get_data = request.form.to_dict()
page_size = get_data.get('page_size')
page_no = get_data.get('page_no')
param = get_data.get('param')
data, count, page_list, max_page = goods_data.get_goods_list(int(page_size), int(page_no), param)
return jsonify({"data": data, "count": count, "page_no": page_no, "page_list": page_list, "max_page": max_page})
@app.route('/goods/edit', methods=["PUT"])
def goods_edit():
get_data = request.form.to_dict()
id_val = get_data.get('id')
title = get_data.get('title')
category = get_data.get('category')
discount = get_data.get('discount')
original_price = get_data.get('original_price')
shop = get_data.get('shop')
monthly_sales = get_data.get('monthly_sales')
goods_data.edit_goods(id_val, title, category, discount, original_price, shop, monthly_sales)
return '200'
@app.route('/goods/delete', methods=["DELETE"])
def goods_delete():
get_data = request.form.to_dict()
id_val = get_data.get('id')
goods_data.del_goods(id_val)
return '200'
@app.route('/html/predict')
def html_predict():
return render_template('html/predict.html')
@app.route('/goods/predict', methods=["POST"])
def goods_predict():
get_data = request.form.to_dict()
t = get_data.get('t')
p = get_data.get('p')
op = get_data.get('op')
return jsonify({"data": gp.predict(t, p, op)})
if __name__ == '__main__':
app.run(host="127.0.0.1", port=5000)