Creating Static Page Template

#controllers/dashboard/dashboard.py
from flask import session
from flask_classful import FlaskView, route
from controllers.dashboard.category import Category
from controllers.dashboard.post import Post
from controllers.dashboard.page import Page

class Dashboard(FlaskView):
  def __init__(self):
    self.cat = Category()
    self.post = Post()
    self.page = Page()

  @route('/', methods=['GET', 'POST'])
  def index(self):
    session['page'] = 0
    return self.post.get_post()

  @route('/category/', methods=['GET', 'POST'])
  def category(self):
    session['page'] = 0
    return self.cat.get_post()

  @route('/category/delete/<category>')
  def delete(self, category):
    return self.cat.delete(category)

  @route('/category/edit/<category>')
  def edit(self, category):
    return self.cat.edit(category)

  @route('/category/load/')
  def load(self):
    session['page'] += 1
    return self.cat.load(session['page'])

  @route('/post/delete/<id>')
  def delete(self, id):
    return self.post.delete(id)

  @route('/post/edit/<id>')
  def edit(self, id):
    session['edit'] = id
    return self.post.edit(id)

  @route('/post/load/')
  def load_post(self):
    session['page'] += 1
    return self.post.load(session['page'])

  @route('/page/', methods=['GET', 'POST'])
  def get_post_page(self):
    session['page'] = 0
    return self.page.get_post_page()

  @route('/page/edit/<id>')
  def edit_page(self, id):
    session['edit'] = id
    return self.page.edit(id)

  @route('/page/delete/<id>')
  def delete(self, id):
    return self.page.delete(id)

  @route('/page/load/')
  def load_post(self):
    session['page'] += 1
    return self.page.load(session['page'])
    
dashboard = Dashboard()
#controllers/dashboard/post.py
import config, copy, uuid, datetime
from flask import render_template, session, redirect, request
from lib import Lib
from models.dashboard.pagedb import Pagedb

class Page():
  def __init__(self):
    self.lib = Lib()
    self.pagedb = Pagedb()

  def get_post_page(self):
    vdict = copy.deepcopy(config.vdict)
    vdict['blog_title'] = 'បង្កើត​ទំព័រ​មាតិកា'
    vdict['datetime'] = self.lib.get_timezone()

    if (request.method == "POST") and ('logged-in' in session):
      title = request.form['fpage-title']
      if not title:
        title = 'unknown'
        
      content = request.form['fcontent']
      date = request.form['fpage-date']
      time = request.form['fpage-time']
      author = session['logged-in']

      try:
        date = datetime.datetime.strptime(date, "%d/%m/%Y")
      except ValueError:
        vdict['message'] = 'ទំរង់​កាលបរិច្ឆេទ​មិន​ត្រឹមត្រូវ!'
        return render_template('dashboard/page.html', data=vdict)

      try:
        time = datetime.datetime.strptime(time, "%H:%M:%S")
      except ValueError:
        vdict['message'] = 'ទំរង់​ពេល​វេលា​មិន​ត្រឹមត្រូវ!'
        return render_template('dashboard/page.html', data=vdict)

      id = str(uuid.uuid4().int)
      if 'edit' in session:
        self.pagedb.update(session['edit'], title, content, date, time, author)
        session.pop('edit', None)
      else:
        self.pagedb.insert(id, title, content, date, time, author)

      vdict['pages'] = self.pagedb.select(vdict['dashboard_max_post'])
      vdict['thumbs'] = self.lib.get_thumbs(vdict['pages'], 2)

      return render_template('dashboard/page.html', data=vdict)

    elif 'logged-in' in session:
      if 'edit' in session:
        session.pop('edit', None)
        
      vdict['pages'] = self.pagedb.select(vdict['dashboard_max_post'])
      vdict['thumbs'] = self.lib.get_thumbs(vdict['pages'], 2)
      return render_template('dashboard/page.html', data=vdict)
    else:
      return redirect('/login/')

  def delete(self, id):
    if 'logged-in' in session:
      self.pagedb.delete(id)
      return redirect('/dashboard/page/')

    return render_template('login.html', data=vdict)

  def edit(self, id):
    vdict = copy.deepcopy(config.vdict)
    vdict['blog_title'] = 'កែតំរូវ​មាតិកា'

    if 'logged-in' in session:
      vdict['pages'] = self.pagedb.select(vdict['dashboard_max_post'])
      vdict['thumbs'] = self.lib.get_thumbs(vdict['pages'], 2)
      vdict['page'] = self.pagedb.select(id=id)
      date = (vdict['page'][3]).strftime('%d/%m/%Y')
      time = (vdict['page'][4]).strftime('%H:%M:%S')
      vdict['datetime'] = (date, time)

      return render_template('/dashboard/page.html', data=vdict)

    return render_template('login.html', data=vdict)

  def load(self, page):
    if 'logged-in' in session:
      vdict = copy.deepcopy(config.vdict)
      vdict['pages'] = self.pagedb.select(vdict['dashboard_max_post'], page=page)
      vdict['thumbs'] = self.lib.get_thumbs(vdict['pages'], 2)

      new_list = []
      for page in vdict['pages']:
        new_page = list(page)
        new_page[3] = page[3].strftime('%d/%m/%Y') 
        new_page[4] = page[4].strftime('%H:%M:%S') 
        new_list.append(new_page)

      vdict['pages'] = new_list
      return vdict
    else:
      return render_template('login.html', data=vdict)
<!--templates/page.html-->
{% extends "base.html" %}

{% block head %}
{{ super() }}
<link href="/static/styles/fpage.css" rel="stylesheet" >
{% endblock %}

{% block content %}

<h3><span class="page-title">{{ data['page'][1] }}</span></h3>

<p class="page-meta">
  {% if 'logged-in' in session %}
  <span><a href="/dashboard/page/edit/{{ data['page'][0] }}"><img src="/static/images/edit.png" /></a>
    <a href="/dashboard/page/delete/{{ data['page'][0] }}"><img src="/static/images/delete.png" /></a>
  </span>
  {% endif %}
</p>

<article class="page-body">{{ data['page'][2]|safe }}</a></article>

<div style="margin-top:20px;" id="disqus_thread"></div>
<script>
  (function() { // DON'T EDIT BELOW THIS LINE
    var d = document, s = d.createElement('script');
    s.src = 'https://khmerweb.disqus.com/embed.js';
    s.setAttribute('data-timestamp', +new Date());
    (d.head || d.body).appendChild(s);
  })();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>

{% endblock %}

GitHub: "https://github.com/Sokhavuth/E-Learning
Heroku: https://khmerweb-elearning.herokuapp.com/

Comments

Popular posts from this blog

Boilerplate Code

Adding Frontend Single Movie Template