
#routes/dashboard.py import config from bottle import Bottle, redirect from controllers.login import checkLogged import bottle bottle.BaseRequest.MEMFILE_MAX = 1024 * 1024 app = Bottle() @app.route('/') def index(): if checkLogged.call(): from controllers.dashboard import index return index.call() else: redirect('/') @app.route('/logout') def logout(): from controllers.dashboard import logout logout.call() from routes import category app.mount('/category', category.app) from routes import post app.mount('/post', post.app) from routes import book app.mount('/book', book.app) from routes import upload app.mount('/upload', upload.app)
#routes/upload.py from bottle import Bottle, redirect from controllers.login import checkLogged import bottle bottle.BaseRequest.MEMFILE_MAX = 1024 * 1024 app = Bottle() @app.route('/') def index(): if checkLogged.call(): from controllers.dashboard.upload import get return get.call() else: redirect('/')
#controllers/dashboard/upload/get.py import config from bottle import template from copy import deepcopy def call(): kdict = deepcopy(config.kdict) kdict['siteLogo'] = 'ទំព័រ Upload' kdict['route'] = 'upload' return template('dashboard/index.tpl', data=kdict)
<!--views/dashboard/index.tpl--> % rebase('base.tpl') <link href="/static/styles/partials/header.css" rel="stylesheet"></link> <script src="/static/scripts/paginate.js"></script> <section class='Head'> <header class='region'> <div class='site-logo'>{{ data['siteLogo'] }}</div> <form action='/dashboard/search' method='post'> <select name="select"> <option>ការផ្សាយ</option> <option>ជំពូក</option> <option>សៀវភៅ</option> <option>អ្នកប្រើប្រាស់</option> </select> <input type='text' name="q" placeholder="Search" required /> <input type="submit" value='បញ្ជូន' /> </form> <div class='logout'><a href='/dashboard/logout'>ចេញក្រៅ</a></div> </header> </section> <link href="/static/styles/partials/body.css" rel="stylesheet"></link> <section class='Body region'> %include('dashboard/menu.tpl') <% if 'post' in data['route']: include('dashboard/post.tpl') elif 'category' in data['route']: include('dashboard/category.tpl') elif 'book' in data['route']: include('dashboard/book.tpl') elif 'upload' in data['route']: include('dashboard/upload.tpl') end %> </section> <link href="/static/styles/partials/listing.css" rel="stylesheet"></link> <section class='Listing region'> %if 'count' in data: <div class='info'>សរុបទាំងអស់មានចំនួនៈ {{data['count']}}</div> %else: <div class='info'>សរុបទាំងអស់មានចំនួនៈ</div> %end <div class='items'> %if 'items' in data: %for item in data['items']: <div class='item'> <a href="/{{data['route']}}/{{item[3]}}"><img class='thumb' src="{{item[1]}}" /></a> <div class='wrapper'> <a href="/{{data['route']}}/{{item[3]}}">{{item[0]}}</a> <p class='date'></p> <script> $('.items .item .date').html(new Date("{{item[2]}}").toLocaleDateString()) </script> </div> <div class='icon'> <a href='/dashboard/{{data["route"]}}/edit/{{item[3]}}'><img src='/static/images/edit.png' /></a> <a href='/dashboard/{{data["route"]}}/delete/{{item[3]}}'><img src='/static/images/delete.png' /></a> </div> </div> %end %end </div> <script> var route = "{{data['route']}}" </script> <div class='load-more'><img onclick='paginate(route)' src="/static/images/load-more.png" /></div> </section>
<!--views/dashboard/upload.tpl--> <link href='/static/styles/category.css' rel='stylesheet' /> <section class='Category'> <form action='/dashboard/upload' method='post'> <a>ជ្រើសរើសឯកសារៈ</a><input type='file' name="upload" required /> <a></a><input type='submit' value='Upload' /> </form> </section>
GitHub: https://github.com/Sokhavuth/REST-API
Vercel: https://rest-api-zeta.vercel.app