diff --git a/flaskr/__init__.py b/flaskr/__init__.py index 7d7ec81..33779f8 100644 --- a/flaskr/__init__.py +++ b/flaskr/__init__.py @@ -8,7 +8,7 @@ def create_app(test_config=None): app.config.from_mapping( SECRET_KEY='dev', DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'), - ALLOW_REGISTER=False, + ALLOW_REGISTER=True, ) app.wsgi_app = ProxyFix( diff --git a/flaskr/blog.py b/flaskr/blog.py index 523cfaf..8082d2f 100644 --- a/flaskr/blog.py +++ b/flaskr/blog.py @@ -28,6 +28,23 @@ def index(): posts.append(post) return render_template('blog/index.html', posts=posts) +@bp.route('/firehose') +def firehose(): + db = get_db() + db_posts = db.execute( + 'SELECT p.id, title, body, created, author_id, username' + ' FROM post p JOIN user u ON p.author_id = u.id' + ' ORDER BY created DESC' + ).fetchall() + posts = [] + for post in db_posts: + if post['created'] > datetime.datetime.utcnow(): + continue + post = dict(post) + post['body'] = markdown.markdown(post['body']) + posts.append(post) + return render_template('blog/firehose.html', posts=posts) + @bp.route('/create',methods=('GET', 'POST')) @login_required def create(): @@ -69,6 +86,12 @@ def get_post(id, check_author=True): return post +@bp.route('//') +def individual_post(id): + post = dict(get_post(id, False)) + post['body'] = markdown.markdown(post['body']) + return render_template('blog/post.html', post=post) + @bp.route('//update', methods=('GET', 'POST')) @login_required def update(id): diff --git a/flaskr/static/style.css b/flaskr/static/style.css index 63f3f5b..89c7015 100644 --- a/flaskr/static/style.css +++ b/flaskr/static/style.css @@ -12,7 +12,7 @@ nav { background: lightgray; display: flex; align-items: center; padding: 0 0.5r nav h1 { flex: auto; margin: 0; } nav h1 a { text-decoration: none; padding: 0.25rem 0.5rem; } nav ul { display: flex; list-style: none; margin: 0; padding: 0; } -nav ul li a, nav ul li span, header .action { display: block; padding: 0.5rem; } +nav ul li a, nav ul li span, header .action { display: block;} .content { padding: 0 1rem 1rem; } .content > header { border-bottom: 1px solid lightgray; display: flex; align-items: flex-end; } .content > header h1 { flex: auto; margin: 1rem 0 0.25rem 0; } diff --git a/flaskr/templates/base.html b/flaskr/templates/base.html index 152f1af..ae63dea 100644 --- a/flaskr/templates/base.html +++ b/flaskr/templates/base.html @@ -8,8 +8,6 @@ {% if g.user %}
  • {{ g.user['username'] }}
  • Log Out - {% else %} -
  • Log In {% endif %} diff --git a/flaskr/templates/blog/firehose.html b/flaskr/templates/blog/firehose.html new file mode 100644 index 0000000..21e3178 --- /dev/null +++ b/flaskr/templates/blog/firehose.html @@ -0,0 +1,28 @@ +{% extends 'base.html' %} + +{% block header %} +

    {% block title %}Posts{% endblock %}

    + {% if g.user %} + New + {% endif %} +{% endblock %} + +{% block content %} + {% for post in posts %} +
    +
    +
    +

    {{ post['title'] }}

    +
    by {{ post['username'] }} on {{ post['created'].strftime('%Y-%m-%d') }}
    +
    + {% if g.user['id'] == post['author_id'] %} + Edit + {% endif %} +
    +

    {{ post['body']|safe }}

    +
    + {% if not loop.last %} +
    + {% endif %} + {% endfor %} +{% endblock %} diff --git a/flaskr/templates/blog/index.html b/flaskr/templates/blog/index.html index ffd9fbc..f50de7f 100644 --- a/flaskr/templates/blog/index.html +++ b/flaskr/templates/blog/index.html @@ -12,14 +12,13 @@
    -

    {{ post['title'] }}

    +

    {{ post['title'] }}

    by {{ post['username'] }} on {{ post['created'].strftime('%Y-%m-%d') }}
    {% if g.user['id'] == post['author_id'] %} Edit {% endif %}
    -

    {{ post['body']|safe }}

    {% if not loop.last %}
    diff --git a/flaskr/templates/blog/post.html b/flaskr/templates/blog/post.html new file mode 100644 index 0000000..c2a612c --- /dev/null +++ b/flaskr/templates/blog/post.html @@ -0,0 +1,19 @@ +{% extends 'base.html' %} + +{% block header %} +

    {% block title %}{{ post['title'] }}{% endblock %}

    +{% endblock %} + +{% block content %} +
    +
    +
    +
    by {{ post['username'] }} on {{ post['created'].strftime('%Y-%m-%d') }}
    +
    + {% if g.user['id'] == post['author_id'] %} + Edit + {% endif %} +
    +

    {{ post['body']|safe }}

    +
    +{% endblock %} diff --git a/tests/test_blog.py b/tests/test_blog.py index 5f7e816..548363a 100644 --- a/tests/test_blog.py +++ b/tests/test_blog.py @@ -3,7 +3,7 @@ from flaskr.db import get_db def test_index(client, auth): response = client.get('/') - assert b"Log In" in response.data + assert b"Log In" not in response.data assert b"Register" not in response.data auth.login() @@ -11,9 +11,29 @@ def test_index(client, auth): assert b'Log Out' in response.data assert b'test title' in response.data assert b'by test on 2018-01-01' in response.data + assert b'test\nbody' not in response.data + assert b'href="/1/update"' in response.data + assert b'href="/1/"' in response.data + +def test_firehose(client, auth): + response = client.get('/') + assert b"Log In" not in response.data + assert b"Register" not in response.data + + auth.login() + response = client.get('/firehose') + assert b'Log Out' in response.data + assert b'test title' in response.data + assert b'by test on 2018-01-01' in response.data assert b'test\nbody' in response.data assert b'href="/1/update"' in response.data +def test_individual_page(client, auth): + response = client.get('/1/') + assert b'test title' in response.data + assert b'by test on 2018-01-01' in response.data + assert b'test\nbody' in response.data + @pytest.mark.parametrize('path', ( '/create', '/1/update',