145 lines
4.1 KiB
Markdown
145 lines
4.1 KiB
Markdown
# CostaPy
|
|
Python Web Framework. Build with CherryPy and Mako.
|
|
|
|
## Requirement & Installation
|
|
|
|
You need this libraries to use CostaPy:
|
|
- cherrypy
|
|
- mako
|
|
- mysql-connector
|
|
- bcrypt
|
|
|
|
You can install it with run this command
|
|
|
|
sh install.sh
|
|
|
|
## Usage
|
|
|
|
Use this command to start the web service
|
|
|
|
python<ver> costa.py <ip_address> <port> <service_name>
|
|
|
|
For an example like this
|
|
|
|
python3 costa.py localhost 80 My_Service
|
|
|
|
You can use nohup too and running it in the background like this
|
|
|
|
nohup python3 costa.py localhost 80 My_Service &
|
|
|
|
## Configuration
|
|
|
|
### Server (config/server.py)
|
|
|
|
tools.sessions.on
|
|
Default: True
|
|
Description: Enable sessions
|
|
|
|
engine.autoreload.on
|
|
Default: False
|
|
Description: Auto Reload when source code change. Don't use it in production.
|
|
|
|
request.show_tracebacks
|
|
Default: False
|
|
Description: Show traceback for debugging in development purposes.
|
|
|
|
### Global Variable (config/globalvar.py)
|
|
|
|
`directory.py` is the place for storing your Global Variable.
|
|
|
|
GV_base_url
|
|
Is the variable for your base URL (without `/` in the end)
|
|
|
|
GV_title
|
|
Is the variable for your web title
|
|
|
|
### Directory (config/directory.py)
|
|
|
|
`directory.py` is the place for storing your path. It is useful to calling the path more efficiently. there is 2 method that you can store your path. store it in variable for templating configuration, and store it as object for routing the url.
|
|
|
|
This is example that use for templating
|
|
|
|
html_user = "static/pages-user"
|
|
template_user = "static/template-user"
|
|
|
|
And this is example that use for routing the url
|
|
|
|
dirconfig = {
|
|
'/' :
|
|
{
|
|
'tools.sessions.on' : True ,
|
|
'tools.staticdir.root' : os.path.abspath(os.getcwd()) ,
|
|
},
|
|
'/your_dir' :
|
|
{
|
|
'tools.staticdir.on' : True ,
|
|
'tools.staticdir.dir' : './static/your-dir' ,
|
|
},
|
|
}
|
|
|
|
### Templating (config/template.py)
|
|
|
|
Templating is useful when you had more than 1 website template for difference use case. For an example, when you had user and admin in the use case, the website for user have a navbar and footer, and the website for admin have a navbar and sidebar.
|
|
|
|
Before you create a template, make sure your `directory` configuration is ready for storing templates and pages. For an example:
|
|
|
|
html_user = "static/pages-user"
|
|
template_user = "static/template-user"
|
|
|
|
To create the template, you need to insert this code in `def __init__(self)`
|
|
|
|
self.html_pages_user = html.main.get_html(directory.html_user)
|
|
self.html_template_user = html.main.get_html(directory.template_user)
|
|
|
|
if you had admin template, you just need to add the code. for the example like this
|
|
|
|
self.html_pages_user = html.main.get_html(directory.html_user)
|
|
self.html_template_user = html.main.get_html(directory.template_user)
|
|
|
|
self.html_pages_admin = html.main.get_html(directory.html_admin)
|
|
self.html_template_admin = html.main.get_html(directory.template_admin)
|
|
|
|
and then you need create function for each of your template in main class like this
|
|
|
|
def user(self, page):
|
|
params_list = {
|
|
"template" : self.html_template_user ["user.html" ] ,
|
|
"topnav" : self.html_template_user ["user-topnav.html" ] ,
|
|
"container" : self.html_pages_user [page+".html" ]
|
|
}
|
|
return params_list
|
|
|
|
### Database (config/database.py)
|
|
|
|
This is the sample template for configure it
|
|
|
|
db_default = {
|
|
'host' : 'localhost',
|
|
'user' : 'root',
|
|
'password' : '',
|
|
'database' : 'your_db',
|
|
'autocommit' : True,
|
|
}
|
|
|
|
You also can make more than 1 database configuration like this
|
|
|
|
db_default = {
|
|
'host' : 'localhost',
|
|
'user' : 'root',
|
|
'password' : '',
|
|
'database' : 'your_db',
|
|
'autocommit' : True,
|
|
}
|
|
|
|
db_other = {
|
|
'host' : 'localhost',
|
|
'user' : 'root',
|
|
'password' : '',
|
|
'database' : 'other_db',
|
|
'autocommit' : True,
|
|
}
|
|
|
|
## Handling the modules
|
|
|
|
Handling the module is in `handler.py`.
|