dankventskalender migrate to flask
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

100 líneas
2.5KB

  1. from flask import (
  2. Blueprint, render_template,
  3. flash, request, url_for, redirect, abort, g)
  4. from calender.auth import login_required
  5. from calender.db import get_db
  6. bp = Blueprint('calender', __name__)
  7. @bp.route('/')
  8. def index():
  9. db = get_db()
  10. posts = db.execute(
  11. 'SELECT p.id, title, body, created, author_id, username'
  12. ' FROM post p JOIN user u ON p.author_id = u.id'
  13. ' ORDER BY created DESC'
  14. ).fetchall()
  15. return render_template('calender/index.html', posts=posts)
  16. @bp.route('/create', methods=('GET', 'POST'))
  17. @login_required
  18. def create():
  19. if request.method == 'POST':
  20. title = request.form['title']
  21. body = request.form['body']
  22. error = None
  23. if not title:
  24. error = 'Title is required.'
  25. if error is not None:
  26. flash(error)
  27. else:
  28. db = get_db()
  29. db.execute(
  30. 'INSERT INTO post (title, body, author_id)'
  31. ' VALUES (?, ?, ?)',
  32. (title, body, g.user['id'])
  33. )
  34. db.commit()
  35. return redirect(url_for('calender.index'))
  36. return render_template('calender/create.html')
  37. def get_post(id, check_author=True):
  38. post = get_db().execute(
  39. 'SELECT p.id, title, body, created, author_id, username'
  40. ' FROM post p JOIN user u ON p.author_id = u.id'
  41. ' WHERE p.id = ?',
  42. (id,)
  43. ).fetchone()
  44. if post is None:
  45. abort(404, "Post id {0} doesn't exist.".format(id))
  46. if check_author and post['author_id'] != g.user['id']:
  47. abort(403)
  48. return post
  49. @bp.route('/<int:id>/update', methods=('GET', 'POST'))
  50. @login_required
  51. def update(id):
  52. post = get_post(id)
  53. if request.method == 'POST':
  54. title = request.form['title']
  55. body = request.form['body']
  56. error = None
  57. if not title:
  58. error = 'Title is required.'
  59. if error is not None:
  60. flash(error)
  61. else:
  62. db = get_db()
  63. db.execute(
  64. 'UPDATE post SET title = ?, body = ?'
  65. ' WHERE id = ?',
  66. (title, body, id)
  67. )
  68. db.commit()
  69. return redirect(url_for('calender.index'))
  70. return render_template('calender/update.html', post=post)
  71. @bp.route('/<int:id>/delete', methods=('POST',))
  72. @login_required
  73. def delete(id):
  74. get_post(id)
  75. db = get_db()
  76. db.execute('DELETE FROM post WHERE id = ?', (id,))
  77. db.commit()
  78. return redirect(url_for('calender.index'))