Creating Book Database

#controllers/dashboard/post.py
import config, copy, uuid, datetime
from flask import render_template, session, redirect, request
from lib import Lib
from models.dashboard.bookdb import Bookdb

class Book():
  def __init__(self):
    self.lib = Lib()
    self.bookdb = Bookdb()

  def get_post_book(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['fbook-title']
      if not title:
        title = 'unknown'
        
      content = request.form['fcontent']
      date = request.form['fbook-date']
      time = request.form['fbook-time']
      author = session['logged-in']

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

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

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

      vdict['books'] = self.bookdb.select(vdict['dashboard_max_post'])
      vdict['thumbs'] = self.lib.get_thumbs(vdict['books'], 2)
      
      return render_template('dashboard/book.html', data=vdict)

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

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

    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['books'] = self.bookdb.select(vdict['dashboard_max_post'])
      vdict['thumbs'] = self.lib.get_thumbs(vdict['books'], 2)
      vdict['book'] = self.bookdb.select(id=id)
      date = (vdict['book'][3]).strftime('%d/%m/%Y')
      time = (vdict['book'][4]).strftime('%H:%M:%S')
      vdict['datetime'] = (date, time)
      print(vdict['book'])
      return render_template('dashboard/book.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['books'] = self.bookdb.select(vdict['dashboard_max_post'], page=page)
      vdict['thumbs'] = self.lib.get_thumbs(vdict['books'], 2)

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

      vdict['books'] = new_list
      return vdict
    else:
      return render_template('login.html', data=vdict)
#models/dashboard/pagedb.py
import os, psycopg2

class Bookdb():
  def __init__(self):
    self.create_table()

  def set_conection(self):
    if 'DYNO' in os.environ:
      DATABASE_URL = os.environ['DATABASE_URL']
      self.conn = psycopg2.connect(DATABASE_URL, sslmode='require')
      self.cursor = self.conn.cursor()
    else: 
      self.conn = psycopg2.connect(
        database="postgres", 
        user="postgres", 
        password="sokhavuth", 
        host="localhost", 
        port="5432"
      )

      self.cursor = self.conn.cursor()

  def create_table(self):
    self.set_conection()
    
    SQL = '''CREATE TABLE IF NOT EXISTS BOOKS(
      ID TEXT,
      TITLE TEXT,
      CONTENT TEXT,
      CATDATE DATE,
      CATTIME TIME,
      AUTHOR TEXT
    )'''

    self.cursor.execute(SQL)
    self.conn.commit()
    self.conn.close() 

  def insert(self, *book):
    self.set_conection()

    self.cursor.execute("INSERT INTO BOOKS (ID, TITLE, CONTENT, CATDATE, CATTIME, AUTHOR) VALUES %s ", (book,))
  
    self.conn.commit()
    self.conn.close()

  def update(self, *book):
    self.set_conection()

    sql = "UPDATE BOOKS SET ID = %s, TITLE = %s, CONTENT = %s, CATDATE = %s, CATTIME = %s, AUTHOR = %s WHERE ID = '"+book[0]+"'"
    self.cursor.execute(sql, book)

    self.conn.commit()
    self.conn.close()

  def select(self, amount=0, id=0, page=0):
    self.set_conection()
    
    if id:
      SQL = "SELECT * FROM BOOKS WHERE ID = %s LIMIT 1"
      self.cursor.execute(SQL, (id,))
      result = self.cursor.fetchone()
    elif page:
      SQL = "SELECT * FROM BOOKS ORDER BY CATDATE DESC, CATTIME DESC OFFSET %s ROWS FETCH NEXT %s ROWS ONLY"
      self.cursor.execute(SQL, (amount*page, amount))
      result = self.cursor.fetchall()
    else:
      SQL = "SELECT * FROM BOOKS ORDER BY CATDATE DESC, CATTIME DESC LIMIT %s"
      self.cursor.execute(SQL, (amount,))
      result = self.cursor.fetchall()
    
    self.conn.close()
    return result

  def delete(self, id):
    self.set_conection()

    SQL = "DELETE FROM BOOKS WHERE ID = %s"
    self.cursor.execute(SQL, (id,))

    self.conn.commit()
    self.conn.close()

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