分类: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)