from flask import Flask, render_template, request, jsonify, session, Blueprint ,send_file
|
|
from bson import json_util
|
|
import uuid
|
|
import os
|
|
import io
|
|
from APP.view.database import db_session
|
|
from APP.view.model import Block, CollectionBlock
|
|
import requests
|
|
from bs4 import BeautifulSoup
|
|
|
|
bp_block = Blueprint("block", __name__, url_prefix="/block")
|
|
|
|
basedir = os.path.abspath('.')
|
|
|
|
@bp_block.route("/add", methods=["POST"])
|
|
def add_block():
|
|
type = request.form.get('type')
|
|
|
|
collection_id = request.form.get("collection_id")
|
|
id = str(uuid.uuid4())
|
|
print(request.form)
|
|
try:
|
|
count = Block.query.count()
|
|
print(count)
|
|
if type == 'text' or type == 'url':
|
|
content = request.form.get("content")
|
|
b = Block(type=type, content_text=content, order=count, id=id)
|
|
else:
|
|
img = request.files.get("content")
|
|
print(img)
|
|
path = basedir + "/static/img/"
|
|
file_path = path + id + '.png'
|
|
img.save(file_path)
|
|
b = Block(type=type, content_text='static/img/'+id+'.png', order=count, id=id)
|
|
db_session.add(b)
|
|
cb = CollectionBlock(id=collection_id, block_id=id)
|
|
db_session.add(cb)
|
|
db_session.commit()
|
|
except BaseException as e:
|
|
print(e)
|
|
ret = {'msg': 'failed!', 'collection_id': collection_id}
|
|
return json_util.dumps(ret)
|
|
ret = {'msg': 'succuss', 'id': id}
|
|
"""
|
|
插入最末尾
|
|
ret['id'] =
|
|
"""
|
|
return json_util.dumps(ret)
|
|
|
|
|
|
@bp_block.route("/select", methods=["POST"])
|
|
def get_block():
|
|
# 查询这个id的collection的block
|
|
id = request.form.get('id')
|
|
blocks = []
|
|
"""
|
|
blocks.append({'id': '1', 'content': 'xuanz','type':'text'})
|
|
blocks.append({'id': '2', 'content': 'mingg','type':'url'})
|
|
blocks.append({'id': '3', 'content': 'wnqian','type':'picture'})
|
|
"""
|
|
try:
|
|
row = db_session.query(Block).join(CollectionBlock, CollectionBlock.block_id == Block.id).filter(
|
|
CollectionBlock.id == id).order_by(Block.order).all()
|
|
for item in row:
|
|
block_tmp = {}
|
|
block_tmp['id'] = item.id
|
|
block_tmp['type'] = item.type
|
|
if item.type == 'url' or item.type == 'text':
|
|
block_tmp['content'] = item.content_text
|
|
else:
|
|
block_tmp['content'] = item.content_text
|
|
block_tmp['order'] = item.order
|
|
blocks.append(block_tmp)
|
|
except BaseException as e:
|
|
print(str(e))
|
|
ans = {'msg': 'failed'}
|
|
return json_util.dumps(ans)
|
|
|
|
ans = {'blocks': blocks, 'msg': 'succuss'}
|
|
return json_util.dumps(ans)
|
|
|
|
|
|
@bp_block.route("/delete", methods=["POST"])
|
|
def delete():
|
|
collection_id = request.form.get('collection_id')
|
|
block_id = request.form.get('block_id')
|
|
"""
|
|
删除这个id的collection的block,记得刷新顺序
|
|
"""
|
|
try:
|
|
db_session.query(CollectionBlock).filter(CollectionBlock.id == collection_id,
|
|
CollectionBlock.block_id == block_id).delete()
|
|
item = db_session.query(Block).filter(Block.id == block_id).first()
|
|
order_item = item.order
|
|
db_session.delete(item)
|
|
db_session.query(Block).filter(Block.order > order_item).update({Block.order: Block.order - 1})
|
|
db_session.commit()
|
|
except BaseException as e:
|
|
print(str(e))
|
|
ret = {'msg': 'failed!'}
|
|
return json_util.dumps(ret)
|
|
|
|
ret = {'msg': 'succuss'}
|
|
return json_util.dumps(ret)
|
|
|
|
|
|
@bp_block.route("/swap", methods=["POST"])
|
|
def swap():
|
|
id = request.form.get('id')
|
|
collection_id = request.form.get('collection_id')
|
|
order = request.form.get('new_order')
|
|
"""
|
|
把这个collection_id的collection的这个id的块和顺序是order的块交换
|
|
编号从零开始,有可能是自己
|
|
"""
|
|
try:
|
|
row = db_session.query(CollectionBlock).filter(CollectionBlock.id == collection_id,
|
|
CollectionBlock.block_id == id).first()
|
|
if row is None:
|
|
ret = {'msg': 'collection_id and block_id error!'}
|
|
return json_util.dumps(ret)
|
|
|
|
item1 = db_session.query(Block).filter(Block.id == id).first()
|
|
item2 = db_session.query(Block).filter(Block.order == order).first()
|
|
order1 = item1.order
|
|
# order2 = item2.order
|
|
id2 = item2.id
|
|
db_session.query(Block).filter(Block.id == id).update({Block.order: order})
|
|
db_session.query(Block).filter(Block.id == id2).update({Block.order: order1})
|
|
db_session.commit()
|
|
except BaseException as e:
|
|
print(str(e))
|
|
ret = {'msg': 'failed!'}
|
|
return json_util.dumps(ret)
|
|
ret = {'msg': 'succuss'}
|
|
return json_util.dumps(ret)
|
|
|
|
|
|
@bp_block.route("/edit", methods=["POST"])
|
|
def edit():
|
|
collection_id = request.form.get('collection_id')
|
|
block_id = request.form.get('block_id')
|
|
content = request.form.get('content', None)
|
|
"""
|
|
content = none的情况请直接返回
|
|
"""
|
|
if content is None:
|
|
ret = {'msg': 'content is None!'}
|
|
return json_util.dumps(ret)
|
|
try:
|
|
row = db_session.query(CollectionBlock).filter(CollectionBlock.id == collection_id,
|
|
CollectionBlock.block_id == block_id).first()
|
|
if row is None:
|
|
ret = {'msg': 'collection_id and block_id error!'}
|
|
return json_util.dumps(ret)
|
|
item = db_session.query(Block).filter(Block.id==block_id).first()
|
|
type_item = item.type
|
|
if type_item == 'text' or type_item == 'url':
|
|
item.content_text = content
|
|
else:
|
|
item.content_pic = content
|
|
db_session.commit()
|
|
|
|
except BaseException as e:
|
|
print(str(e))
|
|
ret = {'msg': 'failed!'}
|
|
return json_util.dumps(ret)
|
|
|
|
|
|
ret = {'msg': 'succuss'}
|
|
return json_util.dumps(ret)
|
|
|
|
|
|
@bp_block.route("/get_web_name", methods=["POST"])
|
|
def get_web_name():
|
|
url = request.form.get('url')
|
|
ret = {'msg': 'succuss'}
|
|
ori_url = url
|
|
title = None
|
|
if ori_url[0:4] != "http":
|
|
url = "https://" + ori_url
|
|
try:
|
|
html = requests.get(url)
|
|
except:
|
|
url = "http://" + ori_url
|
|
try:
|
|
html = requests.get(url)
|
|
except:
|
|
title = None
|
|
else:
|
|
soup = BeautifulSoup(html.text, "html.parser")
|
|
coding = soup.find('meta', attrs={'http-equiv': 'Content-Type'})
|
|
if coding != None:
|
|
coding = coding['content']
|
|
if 'charset' in coding:
|
|
html.encoding = coding[coding.find('charset')+len('charset='):]
|
|
else:
|
|
html.encoding = 'utf-8'
|
|
else:
|
|
coding = soup.find('meta', attrs={'http-equiv': 'content-type'})
|
|
if coding != None:
|
|
coding = coding['content']
|
|
if 'charset' in coding:
|
|
html.encoding = coding[coding.find('charset')+len('charset='):]
|
|
else:
|
|
html.encoding = 'utf-8'
|
|
else:
|
|
html.encoding = 'utf-8'
|
|
soup = BeautifulSoup(html.text, "html.parser")
|
|
title = soup.find('title').text
|
|
else:
|
|
soup = BeautifulSoup(html.text, "html.parser")
|
|
coding = soup.find('meta', attrs={'http-equiv': 'Content-Type'})
|
|
if coding != None:
|
|
coding = coding['content']
|
|
if 'charset' in coding:
|
|
html.encoding = coding[coding.find('charset')+len('charset='):]
|
|
else:
|
|
html.encoding = 'utf-8'
|
|
else:
|
|
coding = soup.find('meta', attrs={'http-equiv': 'content-type'})
|
|
if coding != None:
|
|
coding = coding['content']
|
|
if 'charset' in coding:
|
|
html.encoding = coding[coding.find('charset')+len('charset='):]
|
|
else:
|
|
html.encoding = 'utf-8'
|
|
else:
|
|
html.encoding = 'utf-8'
|
|
soup = BeautifulSoup(html.text, "html.parser")
|
|
title = soup.find('title').text
|
|
"""
|
|
ret['name'] = url对应的网站的title,没有就返回url
|
|
"""
|
|
|
|
if title != None:
|
|
ret['name'] = title
|
|
else:
|
|
ret['name'] = url
|
|
|
|
return json_util.dumps(ret)
|
|
|