app.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. """
  2. Backend
  3. """
  4. import os
  5. from flask_login import login_required, current_user
  6. from flask_menu import register_menu
  7. from flask import render_template, request, redirect, url_for, flash, Blueprint
  8. from werkzeug.utils import secure_filename
  9. from app import app, db
  10. from app.models import File
  11. BLUEPRINT = Blueprint(
  12. 'backend_file',
  13. __name__,
  14. template_folder='templates'
  15. )
  16. def allowed_file(filename):
  17. allowed_extensions = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'docx'])
  18. return '.' in filename and \
  19. filename.rsplit('.', 1)[1].lower() in allowed_extensions
  20. @BLUEPRINT.route('/create', methods=["GET", "POST"])
  21. @register_menu(BLUEPRINT, 'create_file', 'Create file')
  22. @login_required
  23. def create():
  24. """File creating"""
  25. if request.method == 'POST':
  26. if 'file' not in request.files:
  27. flash('No file part', 'warning')
  28. return redirect(request.url)
  29. file = request.files['file']
  30. if file.filename == '':
  31. flash('No file selected', 'warning')
  32. return redirect(request.url)
  33. if file and allowed_file(file.filename):
  34. filename = secure_filename(file.filename)
  35. file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
  36. db_file = File()
  37. if request.form['title']:
  38. title = request.form['title']
  39. else:
  40. title = file.filename
  41. db_file.title = title
  42. db_file.user_id = current_user.id
  43. db_file.path = file.filename
  44. db.session.add(db_file)
  45. db.session.commit()
  46. flash('File "%s" successfully uploaded' % db_file.title, 'success')
  47. return render_template('file/create.j2')
  48. @BLUEPRINT.route('/edit/<int:file_id>', methods=["GET", "POST"])
  49. @login_required
  50. def edit(file_id):
  51. """File editing"""
  52. db_file = File.query.get(file_id)
  53. if request.method == 'POST':
  54. file = None
  55. if 'file' in request.files:
  56. file = request.files['file']
  57. if file.filename == '':
  58. flash('No file selected', 'warning')
  59. return redirect(request.url)
  60. if file and allowed_file(file.filename):
  61. filename = secure_filename(file.filename)
  62. file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
  63. if file is not None:
  64. db_file.path = file.filename
  65. if request.form['title']:
  66. db_file.title = request.form['title']
  67. else:
  68. db_file.title = db_file.path
  69. db_file.user_id = current_user.id
  70. db.session.add(db_file)
  71. db.session.commit()
  72. flash('File "%s" successfully edit' % db_file.title, 'success')
  73. return render_template(
  74. 'file/edit.j2',
  75. file=db_file,
  76. )
  77. @BLUEPRINT.route('/remove/<int:file_id>')
  78. @login_required
  79. def remove(file_id):
  80. """File removing"""
  81. file = File.query.get(file_id)
  82. db.session.delete(file)
  83. db.session.commit()
  84. flash('File "%s" successfully remove' % file.title, 'success')
  85. return redirect(url_for('backend.index'))
  86. @BLUEPRINT.route('/view/<int:file_id>')
  87. @login_required
  88. def view(file_id):
  89. """Display file"""
  90. file = File.query.get(file_id)
  91. return render_template('file/view.j2', file=file)