Added separate page for viewing entire blog post
authorPerfectfire33 <perfectfireiii@gmail.com>
Thu, 7 Jul 2022 19:27:43 +0000 (15:27 -0400)
committerPerfectfire33 <perfectfireiii@gmail.com>
Thu, 7 Jul 2022 19:27:43 +0000 (15:27 -0400)
.idea/workspace.xml
flaskr/__pycache__/blog.cpython-37.pyc
flaskr/blog.py
flaskr/schema.sql
flaskr/templates/blog/index.html
flaskr/templates/blog/view_post.html [new file with mode: 0644]
instance/flaskr.sqlite

index 831cf3c2620340275f234dd0b7c89ba1c456c1d7..ef87501f0f2411d139c95aa7b14e75b77d76a9e2 100644 (file)
@@ -2,19 +2,11 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="e00b4877-6392-4152-a4a7-f9ffd3e1faca" name="Default Changelist" comment="">
+      <change afterPath="$PROJECT_DIR$/flaskr/templates/blog/view_post.html" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/flaskr/__init__.py" beforeDir="false" afterPath="$PROJECT_DIR$/flaskr/__init__.py" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/flaskr/admin.py" beforeDir="false" afterPath="$PROJECT_DIR$/flaskr/admin.py" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/flaskr/blog.py" beforeDir="false" afterPath="$PROJECT_DIR$/flaskr/blog.py" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/flaskr/templates/about.html" beforeDir="false" afterPath="$PROJECT_DIR$/flaskr/templates/about.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/flaskr/templates/admin/user_edit.html" beforeDir="false" afterPath="$PROJECT_DIR$/flaskr/templates/admin/user_edit.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/flaskr/templates/admin/user_list.html" beforeDir="false" afterPath="$PROJECT_DIR$/flaskr/templates/admin/user_list.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/flaskr/templates/base.html" beforeDir="false" afterPath="$PROJECT_DIR$/flaskr/templates/base.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/flaskr/schema.sql" beforeDir="false" afterPath="$PROJECT_DIR$/flaskr/schema.sql" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/flaskr/templates/blog/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/flaskr/templates/blog/index.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/flaskr/templates/home.html" beforeDir="false" afterPath="$PROJECT_DIR$/flaskr/templates/home.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/flaskr/templates/services.html" beforeDir="false" afterPath="$PROJECT_DIR$/flaskr/templates/services.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/flaskr/user_edit.py" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/instance/flaskr.sqlite" beforeDir="false" afterPath="$PROJECT_DIR$/instance/flaskr.sqlite" afterDir="false" />
     </list>
     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
     <option name="SHOW_DIALOG" value="false" />
@@ -27,8 +19,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/flaskr/blog.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="320">
-              <caret line="16" column="25" selection-start-line="16" selection-start-column="25" selection-end-line="16" selection-end-column="25" />
+            <state relative-caret-position="300">
+              <caret line="54" column="13" lean-forward="true" selection-start-line="54" selection-start-column="13" selection-end-line="54" selection-end-column="13" />
               <folding>
                 <element signature="e#0#90#0" expanded="true" />
               </folding>
           </provider>
         </entry>
       </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/flaskr/templates/blog/view_post.html">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="160">
+              <caret line="8" column="14" lean-forward="true" selection-start-line="8" selection-start-column="14" selection-end-line="8" selection-end-column="14" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/flaskr/static/style.css">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="220">
+              <caret line="11" column="18" selection-start-line="11" selection-start-column="18" selection-end-line="11" selection-end-column="18" />
+            </state>
+          </provider>
+        </entry>
+      </file>
       <file pinned="false" current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/flaskr/templates/blog/index.html">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="300">
-              <caret line="15" column="39" selection-start-line="15" selection-start-column="39" selection-end-line="15" selection-end-column="39" />
+            <state relative-caret-position="380">
+              <caret line="19" column="19" lean-forward="true" selection-start-line="19" selection-start-column="19" selection-end-line="19" selection-end-column="19" />
             </state>
           </provider>
         </entry>
@@ -60,8 +70,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/flaskr/auth.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="340">
-              <caret line="47" column="12" lean-forward="true" selection-start-line="47" selection-start-column="12" selection-end-line="47" selection-end-column="12" />
+            <state relative-caret-position="260">
+              <caret line="13" lean-forward="true" selection-start-line="13" selection-end-line="13" />
               <folding>
                 <element signature="e#0#99#0" expanded="true" />
               </folding>
@@ -72,8 +82,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/flaskr/schema.sql">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="420">
-              <caret line="21" column="17" lean-forward="true" selection-start-line="21" selection-start-column="17" selection-end-line="21" selection-end-column="17" />
+            <state relative-caret-position="380">
+              <caret line="19" column="19" lean-forward="true" selection-start-line="19" selection-start-column="19" selection-end-line="19" selection-end-column="19" />
             </state>
           </provider>
         </entry>
           </provider>
         </entry>
       </file>
-      <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/flaskr/templates/base.html">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="-1120">
-              <caret line="8" column="8" lean-forward="true" selection-start-line="8" selection-start-column="8" selection-end-line="8" selection-end-column="8" />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/flaskr/templates/home.html">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="680">
-              <caret line="53" column="8" lean-forward="true" selection-start-line="53" selection-start-column="8" selection-end-line="53" selection-end-column="8" />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/flaskr/templates/about.html">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="340">
-              <caret line="17" column="17" selection-start-line="17" selection-start-column="17" selection-end-line="17" selection-end-column="17" />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/flaskr/templates/services.html">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="200">
-              <caret line="10" column="5" lean-forward="true" selection-start-line="10" selection-start-column="5" selection-end-line="10" selection-end-column="5" />
-            </state>
-          </provider>
-        </entry>
-      </file>
     </leaf>
   </component>
   <component name="FindInProjectRecents">
   <component name="IdeDocumentHistory">
     <option name="CHANGED_PATHS">
       <list>
-        <option value="$PROJECT_DIR$/Readme.txt" />
         <option value="$PROJECT_DIR$/templates/layout.html" />
         <option value="$PROJECT_DIR$/sql/upload_file.sql" />
         <option value="$PROJECT_DIR$/schema.sql" />
         <option value="$PROJECT_DIR$/flaskr/static/style.css" />
         <option value="$PROJECT_DIR$/flaskr/user_edit.py" />
         <option value="$PROJECT_DIR$/flaskr/auth.py" />
-        <option value="$PROJECT_DIR$/flaskr/schema.sql" />
         <option value="$PROJECT_DIR$/flaskr/templates/admin/user_edit.html" />
         <option value="$PROJECT_DIR$/flaskr/templates/admin/user_list.html" />
         <option value="$PROJECT_DIR$/flaskr/__init__.py" />
         <option value="$PROJECT_DIR$/flaskr/templates/home.html" />
         <option value="$PROJECT_DIR$/flaskr/templates/about.html" />
         <option value="$PROJECT_DIR$/flaskr/templates/services.html" />
+        <option value="$PROJECT_DIR$/flaskr/templates/blog/view_post.html" />
+        <option value="$PROJECT_DIR$/flaskr/schema.sql" />
         <option value="$PROJECT_DIR$/flaskr/blog.py" />
         <option value="$PROJECT_DIR$/flaskr/templates/blog/index.html" />
       </list>
     </layout>
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/Readme.txt">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="120">
-          <caret line="6" column="4" lean-forward="true" selection-start-line="6" selection-start-column="4" selection-end-line="6" selection-end-column="4" />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/flaskr/Readme2">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="240">
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/flaskr/static/style.css">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="60">
-          <caret line="3" column="58" selection-start-line="3" selection-start-column="58" selection-end-line="3" selection-end-column="58" />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/flaskr/templates/blog/create.html">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="200">
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/flaskr/__init__.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="80">
-          <caret line="4" lean-forward="true" selection-start-line="4" selection-end-line="4" />
-          <folding>
-            <element signature="e#0#9#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/flaskr/templates/base.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-1120">
-          <caret line="8" column="8" lean-forward="true" selection-start-line="8" selection-start-column="8" selection-end-line="8" selection-end-column="8" />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/flaskr/templates/home.html">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="680">
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/flaskr/templates/base.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="440">
+          <caret line="86" column="8" lean-forward="true" selection-start-line="86" selection-start-column="8" selection-end-line="86" selection-end-column="8" />
+        </state>
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/flaskr/templates/services.html">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="200">
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/flaskr/__init__.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="80">
+          <caret line="4" lean-forward="true" selection-start-line="4" selection-end-line="4" />
+          <folding>
+            <element signature="e#0#9#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/flaskr/auth.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="340">
-          <caret line="47" column="12" lean-forward="true" selection-start-line="47" selection-start-column="12" selection-end-line="47" selection-end-column="12" />
+        <state relative-caret-position="260">
+          <caret line="13" lean-forward="true" selection-start-line="13" selection-end-line="13" />
           <folding>
             <element signature="e#0#99#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/flaskr/static/style.css">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="220">
+          <caret line="11" column="18" selection-start-line="11" selection-start-column="18" selection-end-line="11" selection-end-column="18" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/flaskr/schema.sql">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="380">
+          <caret line="19" column="19" lean-forward="true" selection-start-line="19" selection-start-column="19" selection-end-line="19" selection-end-column="19" />
+        </state>
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/flaskr/admin.py">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="980">
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/flaskr/blog.py">
+    <entry file="file://$PROJECT_DIR$/flaskr/templates/blog/view_post.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="320">
-          <caret line="16" column="25" selection-start-line="16" selection-start-column="25" selection-end-line="16" selection-end-column="25" />
-          <folding>
-            <element signature="e#0#90#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="160">
+          <caret line="8" column="14" lean-forward="true" selection-start-line="8" selection-start-column="14" selection-end-line="8" selection-end-column="14" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/flaskr/schema.sql">
+    <entry file="file://$PROJECT_DIR$/flaskr/blog.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="420">
-          <caret line="21" column="17" lean-forward="true" selection-start-line="21" selection-start-column="17" selection-end-line="21" selection-end-column="17" />
+        <state relative-caret-position="300">
+          <caret line="54" column="13" lean-forward="true" selection-start-line="54" selection-start-column="13" selection-end-line="54" selection-end-column="13" />
+          <folding>
+            <element signature="e#0#90#0" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/flaskr/templates/blog/index.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="300">
-          <caret line="15" column="39" selection-start-line="15" selection-start-column="39" selection-end-line="15" selection-end-column="39" />
+        <state relative-caret-position="380">
+          <caret line="19" column="19" lean-forward="true" selection-start-line="19" selection-start-column="19" selection-end-line="19" selection-end-column="19" />
         </state>
       </provider>
     </entry>
index 02c59dbc7298c9126fdedb7967428b8a0b5893a3..3128a19183fe1d0871cb281e7d3a0f2591a420eb 100644 (file)
Binary files a/flaskr/__pycache__/blog.cpython-37.pyc and b/flaskr/__pycache__/blog.cpython-37.pyc differ
index edda52a0044dd09efe5f90f8345949faaf026d6e..55086878934c569c3e8e37de2cc4b88591099964 100644 (file)
@@ -13,7 +13,7 @@ bp = Blueprint('blog', __name__)
 def index():
     db = get_db()
     posts = db.execute(
-        'SELECT p.post_id, post_title, post_body, post_created, post_author_id, xuser_username'
+        'SELECT p.post_id, post_title, post_body, post_shortbody, post_created, post_author_id, xuser_username'
         ' FROM post p JOIN xuser u ON p.post_author_id = u.xuser_id'
         ' ORDER BY post_created DESC'
     ).fetchall()
@@ -27,6 +27,7 @@ def create():
         title = request.form['title']
         body = request.form['body']
         error = None
+        short_body = body[0:100]
 
         if not title:
             error = 'Title is required.'
@@ -36,9 +37,9 @@ def create():
         else:
             db = get_db()
             db.execute(
-                'INSERT INTO post (post_title, post_body, post_author_id)'
-                ' VALUES (?, ?, ?)',
-                (title, body, g.user['xuser_id'])
+                'INSERT INTO post (post_title, post_body, post_shortbody, post_author_id)'
+                ' VALUES (?, ?, ?, ?)',
+                (title, body, short_body, g.user['xuser_id'])
             )
             db.commit()
             return redirect(url_for('blog.index'))
@@ -63,6 +64,26 @@ def get_post(id, check_author=True):
     return post
 
 
+def get_post_view(id):
+    post = get_db().execute(
+        'SELECT p.post_id, post_title, post_body, post_created, post_author_id, xuser_username'
+        ' FROM post p JOIN xuser u ON p.post_author_id = u.xuser_id'
+        ' WHERE p.post_id = ?',
+        (id,)
+    ).fetchone()
+
+    if post is None:
+        abort(404, f"Post id {id} doesn't exist.")
+
+    return post
+
+@bp.route('/<int:id>/view', methods=('GET', 'POST'))
+def view(id):
+    post = get_post_view(id)
+
+    return render_template('blog/view_post.html', post=post)
+
+
 @bp.route('/<int:id>/update', methods=('GET', 'POST'))
 @login_required
 def update(id):
index 746c2c08d099207edf7f604f70c28f6232b64d49..0924d1050b583c27bcd97ff36abdd49e017c018a 100644 (file)
@@ -23,7 +23,8 @@ CREATE TABLE post (
   post_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   post_title TEXT NOT NULL,
   post_body TEXT NOT NULL,
-  FOREIGN KEY (post_author_id) REFERENCES user (user_id)
+  post_shortbody TEXT NOT NULL,
+  FOREIGN KEY (post_author_id) REFERENCES xuser (xuser_id)
 );
 
 
index c7a9f8301d3a48e7fc89e1495ed8eb020ced01a3..c87b1aa03f7824d020054186a0171e0f701655ce 100644 (file)
     <article class="post">
       <header>
         <div>
-          <h1>{{ post['post_title'] }}</h1>
+          <h1><a class="action" href="{{ url_for('blog.view', id=post['post_id']) }}">{{ post['post_title'] }}</a></h1>
           <div class="about">by {{ post['xuser_username'] }} on {{ post['post_created'].strftime('%Y-%m-%d') }}</div>
         </div>
         {% if g.user['xuser_id'] == post['post_author_id'] %}
           <a class="action" href="{{ url_for('blog.update', id=post['post_id']) }}">Edit</a>
         {% endif %}
       </header>
-      <p class="body">{{ post['post_body'] }}</p>
+      <p class="body">{{ post['post_shortbody'] }}</p>
     </article>
     {% if not loop.last %}
       <hr>
diff --git a/flaskr/templates/blog/view_post.html b/flaskr/templates/blog/view_post.html
new file mode 100644 (file)
index 0000000..7380a73
--- /dev/null
@@ -0,0 +1,20 @@
+{% extends 'base.html' %}
+
+{% block header %}
+  <h1>{% block title %}Post{% endblock %}</h1>
+{% endblock %}
+
+{% block content %}
+    <article class="post">
+      <header>
+        <div>
+          <h1>{{ post['post_title'] }}</h1>
+          <div class="about">by {{ post['xuser_username'] }} on {{ post['post_created'].strftime('%Y-%m-%d') }}</div>
+        </div>
+        {% if g.user['xuser_id'] == post['post_author_id'] %}
+          <a class="action" href="{{ url_for('blog.update', id=post['post_id']) }}">Edit</a>
+        {% endif %}
+      </header>
+      <p class="body">{{ post['post_body'] }}</p>
+    </article>
+{% endblock %}
\ No newline at end of file
index 3f4558b0ff34b0c12a8d28441c2716ff06c38a22..1e5ba337bad73216473080218ed6793adc6cae8e 100644 (file)
Binary files a/instance/flaskr.sqlite and b/instance/flaskr.sqlite differ