#main.py import config from flask import Flask from controllers.index import Index from controllers.login import Login from controllers.dashboard.dashboard import Dashboard app = Flask(__name__) app.secret_key = config.vdict['secret_key'] Index.register(app, route_base='/') Login.register(app, route_base='/login') Dashboard.register(app, route_base='/dashboard') if __name__ == '__main__': app.run(debug=True)
#controllers/category.py
import config, copy
from flask import render_template, session, redirect
from flask_classful import FlaskView, route
from controllers.dashboard.category import Category
class Dashboard(FlaskView):
def __init__(self):
self.cat = Category()
@route('/')
def index(self):
vdict = copy.deepcopy(config.vdict)
vdict['blog_title'] = 'ទំព័រគ្រប់គ្រង'
if 'logged-in' in session:
return render_template('dashboard/dashboard.html', data=vdict)
else:
return redirect('/login/')
@route('/category/', methods=['GET', 'POST'])
def category(self):
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)
dashboard = Dashboard()
#controllers/dashboard/category.py
import config, copy, lib, datetime
from flask import render_template, request, session, redirect
from models.dashboard.categorydb import Categorydb
class Category():
def __init__(self):
self.categorydb = Categorydb()
self.lib = lib.Lib()
def get_post(self):
vdict = copy.deepcopy(config.vdict)
vdict['blog_title'] = 'បង្កើតប្រភេទមេរៀន'
vdict['datetime'] = self.lib.get_timezone()
vdict['categories'] = self.categorydb.select(vdict['dashboard_max_category'])
vdict['thumbs'] = self.lib.get_thumbs(vdict['categories'], 2)
if (request.method == "POST") and ('logged-in' in session):
category = request.form['fcategory-title']
if not category:
category = 'unknown'
content = request.form['fcontent']
date = request.form['fcategory-date']
time = request.form['fcategory-time']
author = session['logged-in']
try:
date = datetime.datetime.strptime(date, "%d/%m/%Y")
except ValueError:
vdict['message'] = 'ទំរង់កាលបរិច្ឆេទមិនត្រឹមត្រូវ!'
return render_template('dashboard/category.html', data=vdict)
try:
time = datetime.datetime.strptime(time, "%H:%M:%S")
except ValueError:
vdict['message'] = 'ទំរង់ពេលវេលាមិនត្រឹមត្រូវ!'
return render_template('dashboard/category.html', data=vdict)
self.categorydb.insert(category, content, date, time, author)
vdict['categories'] = self.categorydb.select(vdict['dashboard_max_category'])
vdict['thumbs'] = self.lib.get_thumbs(vdict['categories'], 2)
return render_template('dashboard/category.html', data=vdict)
else:
if 'logged-in' in session:
return render_template('dashboard/category.html', data=vdict)
return render_template('login.html', data=vdict)
def delete(self, category):
if 'logged-in' in session:
self.categorydb.delete(category)
return redirect('/dashboard/category/')
return render_template('login.html', data=vdict)
def edit(self, category):
if 'logged-in' in session:
vdict = copy.deepcopy(config.vdict)
vdict['blog_title'] = 'បង្កើតប្រភេទមេរៀន'
vdict['categories'] = self.categorydb.select(vdict['dashboard_max_category'])
vdict['thumbs'] = self.lib.get_thumbs(vdict['categories'], 2)
category = self.categorydb.select(1, category)
vdict['datetime'] = (category[3].strftime('%d/%m/%Y'), category[4].strftime('%H:%M:%S'))
vdict['category'] = category
return render_template('dashboard/category.html', data=vdict)
return render_template('login.html', data=vdict)
#models/dashboard/userdb.py
import os, psycopg2
class Categorydb():
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 CATEGORIES(
ID SERIAL PRIMARY KEY,
CATEGORY VARCHAR(320),
CONTENT TEXT,
CATDATE DATE,
CATTIME TIME,
AUTHOR VARCHAR(320)
)'''
self.cursor.execute(SQL)
self.conn.commit()
self.conn.close()
def insert(self, *category):
self.set_conection()
self.cursor.execute("SELECT CATEGORY FROM CATEGORIES WHERE CATEGORY = %s", (category[0],))
result = self.cursor.fetchone()
if not result:
self.cursor.execute("INSERT INTO CATEGORIES (CATEGORY, CONTENT, CATDATE, CATTIME, AUTHOR) VALUES %s ", (category,))
else:
sql = "UPDATE CATEGORIES SET CATEGORY = %s, CONTENT = %s, CATDATE = %s, CATTIME = %s, AUTHOR = %s WHERE CATEGORY = '"+category[0]+"'"
self.cursor.execute(sql, category)
self.conn.commit()
self.conn.close()
def select(self, amount, category=''):
self.set_conection()
if category:
SQL = "SELECT * FROM CATEGORIES WHERE CATEGORY = %s LIMIT 1"
self.cursor.execute(SQL, (category,))
result = self.cursor.fetchone()
else:
SQL = "SELECT * FROM CATEGORIES 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, category):
self.set_conection()
SQL = "DELETE FROM CATEGORIES WHERE CATEGORY = %s"
self.cursor.execute(SQL, (category,))
self.conn.commit()
self.conn.close()
GitHub: "https://github.com/Sokhavuth/E-Learning
Heroku: https://khmerweb-elearning.herokuapp.com/














