邓淳远、崔鹏宇、翁思扬组云计算期末项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

242 lines
8.3 KiB

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)