messing around with flask tutorial

blog.py 2.5KB

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