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
Post a Comment