分类:N05_python
from flask import Flask, abort, render_template, request, jsonify import os from flask_sqlalchemy import SQLAlchemy from sqlalchemy import Table, func # from elasticsearch import Elasticsearch import pymysql from flask_wtf import CSRFProtect csrf = CSRFProtect() pymysql.install_as_MySQLdb() # ModuleNotFoundError: No module named 'MySQLdb' app = Flask(__name__, template_folder='template', static_url_path='/', static_folder='resource') app.config['SECRET_KEY'] = os.urandom(24) csrf.init_app(app) app.jinja_env.auto_reload = True app.config['TEMPLATES_AUTO_RELOAD'] = True # 使用集成方式处理SQLAlchemy app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@localhost/tool_pic?charset=utf8' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # True: 跟踪数据库的修改,及时发送信号 app.config['SQLALCHEMY_POOL_SIZE'] = 100 # 数据库连接池的大小。默认是数据库引擎的默认值(通常是 5) # 实例化db对象 db = SQLAlchemy(app) from sqlalchemy import MetaData def dbconnect(): dbsession = db.session DBase = db.Model metadata = MetaData(bind=db.engine) return (dbsession, metadata, DBase) dbsession, md, DBase = dbconnect() # python分类 class PicNameTable(DBase): __tablename__ = 'pic_name' #建立字段函数 id = db.Column(db.Integer,primary_key=True) gid = db.Column(db.Integer) rank = db.Column(db.Integer) name = db.Column(db.String(200)) remark = db.Column(db.String(200)) # PicName表操作 class PicName(DBase): __table__ = Table('pic_name', md, autoload=True) # 添加语法分类 def insert_pic(self, gid, name, remark=None): # 其他字段在数据库中均已设置好默认值,无须手工插入 cat = PicName(gid=gid, name=name) dbsession.add(cat) try: dbsession.commit() except Exception as e: print("Error:" + str(e)) return False return cat.id # 将新的文章编号返回,便于前端页面跳转 def get_data_all_by_gid(self, gid): row = dbsession.query(PicName).filter(PicName.gid == gid).all() return row def get_id(self, name): # 其他字段在数据库中均已设置好默认值,无须手工插入 row = dbsession.query(PicName).filter_by(name=name).first() return row.id def get_rank(self, name): # 其他字段在数据库中均已设置好默认值,无须手工插入 row = dbsession.query(PicName).filter_by(name=name).first() return row.rank # 修改语法 def up_rank(self, name, rank): # 其他字段在数据库中均已设置好默认值,无须手工插入 row = dbsession.query(PicName).filter_by(name=name).first() row.rank = rank try: dbsession.commit() except Exception as e: print("Error:" + str(e)) return id # 继续将文章ID返回调用处 # python分类 class GroupTable(DBase): __tablename__ = 'pic_group' #建立字段函数 id = db.Column(db.Integer,primary_key=True) name = db.Column(db.String(200)) remark = db.Column(db.String(200)) # PicName表操作 class Group(DBase): __table__ = Table('pic_group', md, autoload=True) # 添加语法分类 def insert_group(self, name, remark=None): # 其他字段在数据库中均已设置好默认值,无须手工插入 cat = Group(name=name) dbsession.add(cat) try: dbsession.commit() except Exception as e: print("Error:" + str(e)) return False return cat.id # 将新的文章编号返回,便于前端页面跳转 def get_group_name(self, id): row = dbsession.query(Group).filter(Group.id == id).first() return row def get_group_by_name(self, name): row = dbsession.query(Group).filter(Group.name == name).first() return row # 图片分类 class PicCat(DBase): __tablename__ = 'pic_cat' #建立字段函数 id = db.Column(db.Integer,primary_key=True) name = db.Column(db.String(200)) remark = db.Column(db.String(200)) def get_data_all(self): row = dbsession.query(PicCat).all() return row # python分类 class PicCatRecordTable(DBase): __tablename__ = 'pic_cat_record' #建立字段函数 id = db.Column(db.Integer,primary_key=True) pid = db.Column(db.Integer) cid = db.Column(db.Integer) delete = db.Column(db.Integer) remark = db.Column(db.String(200)) # PicName表操作 class PicCatRecord(DBase): __table__ = Table('pic_cat_record', md, autoload=True) # 添加语法分类 def insert_record(self, pid, cid, remark=None): # 其他字段在数据库中均已设置好默认值,无须手工插入 cat = PicCatRecord(pid=pid, cid=cid) dbsession.add(cat) try: dbsession.commit() except Exception as e: print("Error:" + str(e)) return False return cat.id # 将新的文章编号返回,便于前端页面跳转 def get_data_by_pid_cid(self, pid, cid): row = dbsession.query(PicCatRecordTable).filter_by(pid=pid, cid=cid, delete=1).first() if row: return row.id else: return False def get_data_by_pid(self, pid): row = dbsession.query(PicCatRecordTable).filter_by(pid=pid, delete=0).all() return row def set_del_to_one(self, id): row = dbsession.query(PicCatRecordTable).filter_by(id=id, delete=0).all() for i in row: i.delete = 1 try: dbsession.commit() except Exception as e: print("Error:" + str(e)) return row # 继续将文章ID返回调用处 def set_del_to_zero(self, id): row = dbsession.query(PicCatRecordTable).filter_by(id=id, delete=1).first() row.delete = 0 try: dbsession.commit() except Exception as e: print("Error:" + str(e)) return id # 继续将文章ID返回调用处 # # 修改 # def up_delete_eq1(self, pid): # # 其他字段在数据库中均已设置好默认值,无须手工插入 # row = dbsession.query(PicCatRecordTable).filter_by(pid=pid).first() # row.delete = 1 # try: # dbsession.commit() # except Exception as e: # print("Error:" + str(e)) # return id # 继续将文章ID返回调用处 # # 修改 # def up_delete_eq0(self, id): # # 其他字段在数据库中均已设置好默认值,无须手工插入 # row = dbsession.query(PicCatRecordTable).filter_by(id=id).first() # row.delete = 0 # try: # dbsession.commit() # except Exception as e: # print("Error:" + str(e)) # return id # 继续将文章ID返回调用处 # 设置修改的文件的路径路径 def set_path(): paths = "E:/desktop/KkPic" return paths # 修改图片名称 def rename_files(file, path, new_name): old_file = os.path.join(path, file) new_file = os.path.join(path, new_name) os.rename(old_file, new_file) # 修改图片前的准备 def changeName(path, dirs): for dir in dirs: # print("目录名称:"+ dir) is_have = Group().get_group_by_name(dir) if not is_have: gid = Group().insert_group(dir) print("组名称:" + str(gid)) new_file = os.path.join(path, dir) new_dirs = os.listdir(new_file) # 读取文件列表 for file in new_dirs: if (file.endswith(".jpg")): # print(file) pid = PicName().insert_pic(gid, file) # print(pid) else: print("已经有的组名称") print("目录名称:" + dir) @app.route("/") def index(): # path = set_path() # dirs = os.listdir(path) # 读取文件列表 # changeName(path, dirs) return render_template('index.html') @app.route("/info") def info(): path = set_path() dirs = os.listdir(path) # 读取文件列表 changeName(path, dirs) return render_template('index.html') @app.route("/show", methods=['GET', 'POST']) def shows(): id = request.args.get('id', 1) data_all = PicName().get_data_all_by_gid(id) if len(data_all)<1: data_all = PicName().get_data_all_by_gid(1) message = [] for row in data_all: group_name = Group().get_group_name(row.gid) pic_name = "/img/"+group_name.name+"/"+row.name message.append({ "id": row.id, "name": pic_name, "gid": row.gid, }) pic_cat_all = PicCat().get_data_all() pic = [] for row in pic_cat_all: pic.append({ "id": row.id, "name": row.name, }) # print(pic) return render_template('shows.html', art_all=message, pics = pic) # 前台数据添加后,入库 @app.route("/insert", methods=['POST']) def insert(): rankVal = request.form.get('rankVal', 0) # 传过来的排名 img_src = request.form.get('img_src', None) # 图片地址 cat_data = request.form.get('cat_data', False) # 分类的值 # print('传入数据:') # print("cat_data:"+str(cat_data)) img = img_src.split('/') img_name = img[-1] cat_all = [] if img_name.endswith(".jpg"): pid = PicName().get_id(img_name) # print("pid:"+str(pid)) if rankVal: PicName().up_rank(img_name, rankVal) # print(cat_data) if cat_all: cat_all = cat_data.split(',') if len(cat_all) > 0: # 将图片分类全部变成delete=1 cat_all_delete = PicCatRecord().get_data_by_pid(pid) for row in cat_all_delete: PicCatRecord().set_del_to_one(row.id) # 前台传过来的数据重新校验 for cid in cat_all: ishave = PicCatRecord().get_data_by_pid_cid(pid, cid) # 如果数据库中有,就将delete=0,并且,没有的加入数据库 if ishave: PicCatRecord().set_del_to_zero(ishave) else: PicCatRecord().insert_record(pid, cid) return '1' # 前台数据添加后,入库 @app.route("/getinfo", methods=['POST']) def getinfo(): img_src = request.form.get('img_src', None) # 图片地址 img = img_src.split('/') img_name = img[-1] if img_name.endswith(".jpg"): rank = PicName().get_rank(img_name) pid = PicName().get_id(img_name) cat_all = PicCatRecord().get_data_by_pid(pid) cat = [] for row in cat_all: cat.append({ "cid": row.cid, }) # print("rank:"+str(rank)) # print("cat:"+str(cat)) return jsonify({"status": "success","img_name":img_name, "rank": rank, "cat_all": cat}) # return '1' if __name__ == '__main__': app.run(debug=True, host="0.0.0.0") csrf.init_app(app)