Backend Category CRUD Functionalities
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#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()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#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/