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)