| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- from flask import Blueprint, render_template, request, jsonify
- from flask_login import login_required
- from app import db
- from app.models import SpiderResult, DeepCollection
- from sqlalchemy import or_
- bp = Blueprint('data', __name__, url_prefix='/data')
- @bp.route('/dashboard')
- @login_required
- def dashboard():
- return render_template('data_management.html')
- @bp.route('/api/list', methods=['GET'])
- @login_required
- def get_data_list():
- page = request.args.get('page', 1, type=int)
- per_page = request.args.get('per_page', 10, type=int)
- keyword = request.args.get('keyword', '', type=str)
-
- # Query SpiderResult with a dynamic flag for deep collection existence
- query = db.session.query(
- SpiderResult,
- (DeepCollection.id != None).label('has_deep')
- ).outerjoin(
- DeepCollection,
- SpiderResult.link == DeepCollection.url
- )
-
- if keyword:
- search = f"%{keyword}%"
- query = query.filter(or_(
- SpiderResult.title.like(search),
- SpiderResult.source.like(search),
- SpiderResult.abstract.like(search)
- ))
-
- pagination = query.order_by(SpiderResult.created_at.desc()).paginate(
- page=page, per_page=per_page, error_out=False
- )
-
- return jsonify({
- 'items': [{
- 'id': item.id,
- 'title': item.title,
- 'source': item.source,
- 'link': item.link,
- 'cover': item.cover,
- 'published_at': item.published_at,
- 'has_deep_collection': has_deep,
- 'created_at': item.created_at.strftime('%Y-%m-%d %H:%M:%S')
- } for item, has_deep in pagination.items],
- 'total': pagination.total,
- 'pages': pagination.pages,
- 'current_page': page
- })
- @bp.route('/api/delete', methods=['POST'])
- @login_required
- def delete_data():
- ids = request.json.get('ids', [])
- if not ids:
- return jsonify({'error': 'No IDs provided'}), 400
-
- try:
- SpiderResult.query.filter(SpiderResult.id.in_(ids)).delete(synchronize_session=False)
- db.session.commit()
- return jsonify({'message': 'Deleted successfully', 'count': len(ids)})
- except Exception as e:
- db.session.rollback()
- return jsonify({'error': str(e)}), 500
- @bp.route('/api/deep_collect', methods=['POST'])
- @login_required
- def deep_collect():
- ids = request.json.get('ids', [])
- if not ids:
- return jsonify({'error': 'No IDs provided'}), 400
-
- # Placeholder logic
- return jsonify({'message': 'Deep collection task started', 'count': len(ids)})
|