Jelajahi Sumber

add blog form and send it into blog_list

weichen 4 tahun lalu
induk
melakukan
7144329cdd
2 mengubah file dengan 60 tambahan dan 4 penghapusan
  1. 16 0
      backstage/blogs/forms.py
  2. 44 4
      backstage/blogs/routes.py

+ 16 - 0
backstage/blogs/forms.py

@@ -0,0 +1,16 @@
+from flask_wtf import FlaskForm
+from flask_wtf.file import FileField, FileRequired, FileAllowed
+from wtforms import StringField, SelectField
+from wtforms.validators import DataRequired
+
+
+selected_choices = [('expertise_in_interior_decorating', '裝修專業'),
+                    ('house_style_design', '風格規劃'),
+                    ('home_inspection', '驗屋交屋')]
+
+
+class BlogCreateForm(FlaskForm):
+    title = StringField('Tilte', validators=[DataRequired()])
+    image = FileField('Image', validators=[
+        FileRequired(), FileAllowed(['jpg', 'png', 'gif', 'webp'], 'Images only!')])
+    categories = SelectField('Categories', choices=selected_choices)

+ 44 - 4
backstage/blogs/routes.py

@@ -1,6 +1,8 @@
-from flask import render_template, Blueprint
+from flask import render_template, Blueprint, flash, request, redirect, url_for
 import requests
-
+from backstage.blogs.forms import BlogCreateForm
+from backstage.utils import translate, get_now_time
+from time import sleep
 
 blogs_app = Blueprint('blogs', __name__)
 
@@ -9,5 +11,43 @@ blogs_app = Blueprint('blogs', __name__)
 def blog_list():
     response = requests.get('http://127.0.0.1:5000/api/contents?url=/blog')
     if response.status_code == 200:
-        return render_template(
-            'blogs.html', title='設計專欄', legend='設計專欄列表', blogs=response.json(), length=len(response.json()))
+        return render_template('blogs.html',
+                               title='設計專欄',
+                               legend='設計專欄列表',
+                               blogs=response.json(),
+                               length=len(response.json()),
+                               form=BlogCreateForm())
+
+
+@blogs_app.route('/backstage/create/blog', methods=['POST'])
+def create():
+    form = BlogCreateForm()
+    url_name = translate(form.title.data).replace(' ', '_')
+    front_matter = '''---
+title: "{}"\n\
+date: {}\n\
+draft: {}\n\
+type: "{}"\n\
+url: "{}"\n\
+image: "/img/blog/{}"\n\
+categories: ["{}"]\n\
+---'''.format(form.title.data,
+              get_now_time(),
+              'false',
+              'blog',
+              '/blog/{}'.format(url_name),
+              form.image.data.filename,
+              form.categories.data)
+    data = {'frontMatter': front_matter,
+            'name': request.form['title'],
+            'type': form.categories.data}
+    new_response = requests.post('http://127.0.0.1:5000/api/new_content', json=data)
+    if new_response.status_code == 200:
+        requests.post(
+            'http://127.0.0.1:5000/api/upload/static/img?type=blog&filename={}'.format(
+                form.image.data.filename), files={'image': form.image.data})
+        sleep(0.5)
+        return redirect(url_for('editor.editor', url='/blog/{}'.format(url_name)))
+    else:
+        flash('新增文章失敗', 'danger')
+        return redirect(url_for('blogs.blog_list'))