routes.py 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. from flask import flash, render_template, Blueprint, request, redirect, url_for
  2. from flask.wrappers import Response
  3. import requests
  4. import os
  5. import fnmatch
  6. import re
  7. import markdown
  8. import uuid
  9. from backstage.blogs.forms import BlogCreateForm
  10. from backstage.utils import get_now_time, translate
  11. from backstage.utils.routes import create_content, remove_content, get_trans_title_url_name
  12. from backstage.config import PORTAL_SERVER, UPLOAD_PATH_MAP
  13. blogs_app = Blueprint('blogs', __name__)
  14. SwfType = {
  15. "other_furniture": "其他",
  16. "master_bedroom": "臥室",
  17. "living_room": "客廳",
  18. "study_room": "書房",
  19. "dining_room": "餐廳",
  20. }
  21. furniturePath = UPLOAD_PATH_MAP[0][0] + '../設計家具'
  22. furnitureTypes = []
  23. furnitureTypeFiles = []
  24. furnitureFiles = []
  25. furnitures = []
  26. def refreshFur():
  27. furnitureTypes.clear()
  28. furnitureTypeFiles.clear()
  29. furnitureFiles.clear()
  30. furnitures.clear()
  31. for dirname, dirnames, filenames in os.walk(furniturePath):
  32. # print path to all subdirectories first.
  33. for subdirname in dirnames:
  34. if subdirname.find('.') == -1:
  35. furnitureTypes.append(subdirname)
  36. # print path to all filenames.
  37. for filename in filenames:
  38. if filename.find('_index.md') >= 0:
  39. furnitureTypeFiles.append(os.path.join(dirname, filename))
  40. if filename.find('index.md') >= 0:
  41. furnitureFiles.append(os.path.join(dirname, filename))
  42. headerStart = False
  43. for files in furnitureFiles:
  44. tmpfurniture = {}
  45. with open(files, 'r', encoding="utf-8") as md:
  46. md_line_data = md.readlines()
  47. # print(md_line_data)
  48. for line in md_line_data:
  49. # print(line)
  50. if '---' in line:
  51. headerStart = not headerStart
  52. continue
  53. if headerStart:
  54. if 'title:' in line:
  55. tmpfurniture['title'] = re.split('"|\n', line)[1]
  56. if 'date:' in line:
  57. tmpfurniture['date'] = re.split(':"|\n', line)[0][6:]
  58. if 'draft:' in line:
  59. tmpfurniture['draft'] = re.split(':"|\n', line)[0][7:]
  60. if 'type:' in line:
  61. tmpfurniture['type'] = re.split('"|\n', line)[1]
  62. if 'url:' in line:
  63. tmpfurniture['url'] = re.split('"|\n', line)[1]
  64. if 'image:' in line:
  65. tmpfurniture['image'] = re.split('"|\n', line)[1]
  66. if 'tags:' in line:
  67. tmpfurniture['tags'] = re.split('"|\n', line)[1]
  68. # 避免加入類別項目
  69. if tmpfurniture['type'] != tmpfurniture['url'][1:]:
  70. furnitures.append(tmpfurniture)
  71. def newFur(irequest):
  72. ename = get_trans_title_url_name(irequest.args['newSwfName'])
  73. front_matter = '''---
  74. title: "{}"
  75. date: {}
  76. draft: true
  77. type: "{}"
  78. url: "/{}/{}"
  79. image: ""
  80. ---'''.format(irequest.args['newSwfName'], get_now_time(), irequest.args['newSwfDropdown'], irequest.args['newSwfDropdown'], ename)
  81. newPath = furniturePath + '/' + \
  82. SwfType[irequest.args['newSwfDropdown']] + '/' + ename
  83. if not os.path.exists(newPath):
  84. os.mkdir(newPath)
  85. with open(os.path.join(newPath, 'index.md'), 'w', encoding="utf-8") as md:
  86. md.write(front_matter)
  87. # furniturePath
  88. # get_trans_title_url_name()
  89. return furniturePath
  90. @blogs_app.route('/backstage/blogs', methods=['GET'])
  91. def blog_list():
  92. response = requests.get('{}contents?url=/blog'.format(PORTAL_SERVER))
  93. if response.status_code == 200:
  94. sortedData = sorted(response.json(), key=lambda x: x['date'], reverse=True)
  95. #print(sortedData)
  96. return render_template('blogs.html',
  97. title='設計專欄',
  98. legend='設計專欄列表',
  99. blogs=sortedData,
  100. length=len(response.json()),
  101. form=BlogCreateForm())
  102. @blogs_app.route('/backstage/new_solid_wood_furniture', methods=['GET'])
  103. def new_solid_wood_furniture():
  104. # edit_solid_wood_furniture()
  105. return newFur(request)
  106. @blogs_app.route('/backstage/del_solid_wood_furniture', methods=['GET'])
  107. def del_solid_wood_furniture():
  108. url = request.args.get('url', type=str)
  109. response = requests.delete('{}contents?url={}'.format(PORTAL_SERVER, url))
  110. if response.status_code == 200:
  111. flash('刪除文章成功', 'success')
  112. else:
  113. flash('刪除文章失敗', 'danger')
  114. # edit_solid_wood_furniture()
  115. return url
  116. @blogs_app.route('/backstage/edit_solid_wood_furniture', methods=['GET'])
  117. def edit_solid_wood_furniture():
  118. refreshFur()
  119. """ furniturePath = UPLOAD_PATH_MAP[0][0] + '../設計家具'
  120. furnitureTypes = []
  121. furnitureTypeFiles = []
  122. furnitureFiles = []
  123. furnitures = []
  124. for dirname, dirnames, filenames in os.walk(furniturePath):
  125. # print path to all subdirectories first.
  126. for subdirname in dirnames:
  127. if subdirname.find('.') == -1:
  128. furnitureTypes.append(subdirname)
  129. # print path to all filenames.
  130. for filename in filenames:
  131. if filename.find('_index.md') >= 0:
  132. furnitureTypeFiles.append(os.path.join(dirname, filename))
  133. if filename.find('index.md') >= 0:
  134. furnitureFiles.append(os.path.join(dirname, filename))
  135. headerStart = False
  136. for files in furnitureFiles:
  137. tmpfurniture = {}
  138. with open(files, 'r', encoding="utf-8") as md:
  139. md_line_data = md.readlines()
  140. # print(md_line_data)
  141. for line in md_line_data:
  142. # print(line)
  143. if '---' in line:
  144. headerStart = not headerStart
  145. continue
  146. if headerStart:
  147. if 'title:' in line:
  148. tmpfurniture['title'] = re.split('"|\n', line)[1]
  149. if 'date:' in line:
  150. tmpfurniture['date'] = re.split(':"|\n', line)[0].removeprefix('date: ')
  151. if 'draft:' in line:
  152. tmpfurniture['draft'] = re.split(':"|\n', line)[0].removeprefix('draft: ')
  153. if 'type:' in line:
  154. tmpfurniture['type'] = re.split('"|\n', line)[1]
  155. if 'url:' in line:
  156. tmpfurniture['url'] = re.split('"|\n', line)[1]
  157. if 'image:' in line:
  158. tmpfurniture['image'] = re.split('"|\n', line)[1]
  159. if 'tags:' in line:
  160. tmpfurniture['tags'] = re.split('"|\n', line)[1]
  161. #避免加入類別項目
  162. if tmpfurniture['type'] != tmpfurniture['url'].removeprefix('/'):
  163. furnitures.append(tmpfurniture) """
  164. #sortedData = sorted(furnitures, key=lambda x: x['date'], reverse=True)
  165. # print(furnitures)
  166. """ response = requests.get('{}contents?url=/blog'.format(PORTAL_SERVER))
  167. if response.status_code == 200: """
  168. sortedData = sorted(furnitures, key=lambda x: x['date'], reverse=True)
  169. sortedData = sorted(sortedData, key=lambda x: x['type'])
  170. return render_template('solid_wood_furniture.html',
  171. title='單品家具',
  172. legend='單品家具',
  173. furnitures=sortedData, length=len(furnitures),
  174. )
  175. @blogs_app.route('/backstage/blog/create/', methods=['POST'])
  176. def create():
  177. transcat = ""
  178. form = BlogCreateForm()
  179. if form.categories.data == "居家美學":
  180. transcat = "home_aesthetics"
  181. elif form.categories.data == "規劃師QA":
  182. transcat = "room_planner_expertise"
  183. elif form.categories.data == "驗屋知識":
  184. transcat = "home_inspection_knowledge"
  185. else:
  186. transcat = get_trans_title_url_name(form.categories.data)
  187. transtitle = get_trans_title_url_name(form.title.data)
  188. front_matter = '''---
  189. title: "{}"\n\
  190. date: {}\n\
  191. draft: {}\n\
  192. type: "{}"\n\
  193. url: "{}"\n\
  194. image: "/img/blog/{}"\n\
  195. categories: ["{}"]\n\
  196. col1: "{}"\n\
  197. col2: "{}"\n\
  198. ---'''.format(form.title.data,
  199. get_now_time(),
  200. 'false',
  201. 'blog',
  202. '/blog/{}'.format(transtitle),
  203. form.image.data.filename,
  204. form.categories.data,
  205. transcat, "")
  206. data = {'frontMatter': front_matter,
  207. 'name': transtitle,
  208. 'type': 'blog',
  209. 'categories': form.categories.data,
  210. # 'caturl': caturl
  211. }
  212. return create_content(data, form.image.data)
  213. @blogs_app.route('/backstage/blog/createCat/', methods=['GET'])
  214. def createCat():
  215. #title = ""
  216. front_matter = '''---
  217. title: "{}"\n\
  218. date: {}\n\
  219. draft: {}\n\
  220. type: "{}"\n\
  221. categories: ["{}"]\n\
  222. ---'''.format(request.args["title"],
  223. get_now_time(),
  224. 'false',
  225. 'blog',
  226. get_trans_title_url_name(request.args["title"]))
  227. CatPath = UPLOAD_PATH_MAP[0][0]+"../blog/" + get_trans_title_url_name(request.args["title"])
  228. # print(CatPath)
  229. if not os.path.exists(CatPath):
  230. os.mkdir(CatPath)
  231. with open(os.path.join(CatPath, 'category.md'), 'w', encoding="utf-8") as md:
  232. md.write(front_matter)
  233. print("11")
  234. return Response("你好", 200)
  235. @blogs_app.route('/backstage/blog/remove', methods=['POST'])
  236. def remove():
  237. remove_content()
  238. return redirect(url_for('blogs.blog_list'))
  239. @blogs_app.route('/backstage/utils', methods=['GET'])
  240. def transService():
  241. # print(request.args["trantext"])
  242. return get_trans_title_url_name(request.args["trantext"])
  243. """ def GetCategories():
  244. GetCategories
  245. configfiles = [os.path.join(dirpath, f)
  246. for dirpath, dirnames, files in os.walk(UPLOAD_PATH_MAP+'../blog')
  247. for f in fnmatch.filter(files, 'category.md')]
  248. return configfiles """