前端图片修改属性入库

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


修改内容