BogoToBogo
  • Home
  • About
  • Big Data
  • Machine Learning
  • AngularJS
  • Python
  • C++
  • go
  • DevOps
  • Kubernetes
  • Algorithms
  • More...
    • Qt 5
    • Linux
    • FFmpeg
    • Matlab
    • Django 1.8
    • Ruby On Rails
    • HTML5 & CSS

Bottle micro web services framework 12 : forms get/post II

Bottle_Logo.png




Bookmark and Share





bogotobogo.com site search:



List of Bottle Micro Web Services Tutorials

  1. Introduction
  2. Static files
  3. Template
  4. json
  5. Bucket List App I - sqlite, route, and template
  6. Bucket List App II - get & post
  7. Bucket List App III - Editing
  8. Bucket List App IV - route validation, regex, and static_file
  9. Bucket List App V - json
  10. json to html table
  11. Forms - Get & Post
  12. Forms - Get & Post with editable and checkbox table cells



Table & json

Continued from Forms - Get & Post.

Here is a slightly samples from the previous chapter:

disp.py:

from bottle import route, run, template, request

try:
    import simplejson as json
except ImportError:
    import json

HOST = '192.168.47.101'

test_list = [
    {
    'protocol': 'proto1',
    'service':'s1',
    'plugin': 'plug1',
    'value':1
     },
    {
    'protocol': 'proto2',
    'service':'s2',
    'plugin': 'plug2',
    'value':2
     },
    {
    'protocol': 'proto3',
    'service':'s3',
    'plugin': 'plug3',
    'value':3
     },
]

number_of_test_cases = len(test_list)

@route('/page1')
def serve_homepage():
    return template('disp_table',rows = test_list, cases = number_of_test_cases)

@route('/new')
def add_new():
    return template('add_case_post')

@route('/new', method='POST')
def add_new():
    p = request.forms.get('protocol')
    with open('test.json', 'w') as f:
        json.dump(test_list, f)
    print 'p=',p

run(host=HOST, port=8080, debug=True)


disp_table.tpl:

%# disp_table.tpl
<p>The items are as follows:</p>

<table border="1">
  <tr>
    %for subr in rows[0]:
      <th>{{subr}}</th>
    %end
  </tr>
  %for r in rows:
    <tr>
    %for subr in r:
      <td>{{r[subr]}}</td>
    %end
    </tr>
  %end
</table>


add_case.tpl:

<p>Add a new case to the list:</p>
<form action="/new" method="GET">
    protocol: <input type="text" size="50" maxlength="50" name="protocol"><br>
    service: <input type="text" size="50" maxlength="50" name="service"><br>
    plugin: <input type="text" size="50" maxlength="100" name="plugin"><br>
    value: <input type="text" size="50" maxlength="100" name="value"><br>
    <input type="submit" name="add" value="Add to the list">
</form>


add_case_post.tpl:

Add a new case to the list:

<p>Add a new case to the list:</p> <form action="/new" method="POST"> protocol: <input type="text" size="50" maxlength="50" name="protocol"><br> service: <input type="text" size="50" maxlength="50" name="service"><br> plugin: <input type="text" size="50" maxlength="100" name="plugin"><br> value: <input type="text" size="50" maxlength="100" name="value"><br> <input type="submit" name="add" value="Add to the list"> </form>


If we run the bottle server:

$ python disp.py
Bottle v0.12.7 server starting up (using WSGIRefServer())...
Listening on http://192.168.47.101:8080/
Hit Ctrl-C to quit.
forms_json_display.png





Editable table cell

The following code is almost the same as in the previous section except it passes the key for the editable cell:

@route('/page1')
def serve_homepage():
    return template('disp_table', rows = test_list, cases = number_of_test_cases, edit = 'value')

Note the part: edit = 'value':

This is the full code:

disp.py:

from bottle import route, run, template, request

try:
    import simplejson as json
except ImportError:
    import json

HOST = '192.168.47.101'

test_list = [
    {
    'protocol': 'proto1',
    'service':'s1',
    'plugin': 'plug1',
    'value':1
     },
    {
    'protocol': 'proto2',
    'service':'s2',
    'plugin': 'plug2',
    'value':2
     },
    {
    'protocol': 'proto3',
    'service':'s3',
    'plugin': 'plug3',
    'value':3
     },
]

number_of_test_cases = len(test_list)

@route('/page1')
def serve_homepage():
    return template('disp_table',rows = test_list, cases = number_of_test_cases)

@route('/new')
def add_new():
    return template('add_case_post')

@route('/new', method='POST')
def add_new():
    p = request.forms.get('protocol')
    with open('test.json', 'w') as f:
        json.dump(test_list, f)
    print 'p=',p

run(host=HOST, port=8080, debug=True)

The following table makes a cell editable by setting an attribute 'contenteditable="true" of 'td' element if the key is passed as 'edit':

disp_table.tpl:

%# disp_table.tpl
<p>The items are as follows:</p>

<table border="1">
  <tr>
    % for subr in rows[0]:
      <th>{{subr}}</th>
    % end
  </tr>
  % for r in rows:
    <tr>
    % for subr in r:
      % if subr == edit:
        <td contenteditable="true">{{r[subr]}}</td>
      % else:
        <td>{{r[subr]}}</td>
      % end
    % end
    </tr>
  % end
</table>
Editable_Cell.png




Checkbox table cell

The following code is almost the same as in the previous section except it passes the key for a cell with checkbox:

@route('/page1')
def serve_homepage():
    return template('disp_table', rows = test_list, cases = number_of_test_cases, edit = 'value', check = 'run')

Note the part: check = 'run' and as we can see from the code below, we added an additional field for checkbox, 'run':

This is the full code:

disp.py:

from bottle import route, run, template, request

try:
    import simplejson as json
except ImportError:
    import json

HOST = '192.168.47.101'

test_list = [
    {
    'protocol': 'proto1',
    'service':'s1',
    'plugin': 'plug1',
    'value':1,
    'run':1
     },
    {
    'protocol': 'proto2',
    'service':'s2',
    'plugin': 'plug2',
    'value':2,
    'run':0
     },
    {
    'protocol': 'proto3',
    'service':'s3',
    'plugin': 'plug3',
    'value':3,
    'run':1
     },
]

number_of_test_cases = len(test_list)

@route('/page1')
def serve_homepage():
    return template('disp_table', rows = test_list, cases = number_of_test_cases, edit = 'value', check = 'run')

@route('/new')
def add_new():
    return template('add_case_post')

@route('/new', method='POST')
def add_new():
    p = request.forms.get('protocol')
    with open('test.json', 'w') as f:
        json.dump(test_list, f)
    print 'p=',p

run(host=HOST, port=8080, debug=True)

The following table makes a cell editable by setting an attribute 'contenteditable="true" of 'td' element if the key is passed as 'edit':

disp_table.tpl:

%# disp_table.tpl
<p>The items are as follows:</p>

<table border="1">
  <tr>
    % for subr in rows[0]:
      <th>{{subr}}</th>
    % end
  </tr>
  % for r in rows:
    <tr>
    % for subr in r:
      % if subr == edit:
        <td contenteditable="true">{{r[subr]}}</td>
      % elif subr == check:
        <td>
          % if r[subr] == 1:
            <input type="checkbox" name="myTextEditBox" value="1" checked="checked" />
          % else:
            <input type="checkbox" name="myTextEditBox" value="0" />
          % end
        </td>
      % else:
        <td>{{r[subr]}}</td>
      % end
    % end
    </tr>
  % end
</table>
Checkbox_Cell.png









Ph.D. / Golden Gate Ave, San Francisco / Seoul National Univ / Carnegie Mellon / UC Berkeley / DevOps / Deep Learning / Visualization

YouTubeMy YouTube channel

Sponsor Open Source development activities and free contents for everyone.

Thank you.

- K Hong







Bottle Micro Web Services Tutorials



Introduction

Static files

Template

json

Bucket List App I - sqlite, route, and template

Bucket List App II - get & post

Bucket List App III - Editing

Bucket List App IV - route validation, regex, and static_file

Bucket List App V - json

json to html table

Forms - Get & Post

Forms - Get & Post with editable and checkbox table cells

Sponsor Open Source development activities and free contents for everyone.

Thank you.

- K Hong






Python tutorial



Python Home

Introduction

Running Python Programs (os, sys, import)

Modules and IDLE (Import, Reload, exec)

Object Types - Numbers, Strings, and None

Strings - Escape Sequence, Raw String, and Slicing

Strings - Methods

Formatting Strings - expressions and method calls

Files and os.path

Traversing directories recursively

Subprocess Module

Regular Expressions with Python

Regular Expressions Cheat Sheet

Object Types - Lists

Object Types - Dictionaries and Tuples

Functions def, *args, **kargs

Functions lambda

Built-in Functions

map, filter, and reduce

Decorators

List Comprehension

Sets (union/intersection) and itertools - Jaccard coefficient and shingling to check plagiarism

Hashing (Hash tables and hashlib)

Dictionary Comprehension with zip

The yield keyword

Generator Functions and Expressions

generator.send() method

Iterators

Classes and Instances (__init__, __call__, etc.)

if__name__ == '__main__'

argparse

Exceptions

@static method vs class method

Private attributes and private methods

bits, bytes, bitstring, and constBitStream

json.dump(s) and json.load(s)

Python Object Serialization - pickle and json

Python Object Serialization - yaml and json

Priority queue and heap queue data structure

Graph data structure

Dijkstra's shortest path algorithm

Prim's spanning tree algorithm

Closure

Functional programming in Python

Remote running a local file using ssh

SQLite 3 - A. Connecting to DB, create/drop table, and insert data into a table

SQLite 3 - B. Selecting, updating and deleting data

MongoDB with PyMongo I - Installing MongoDB ...

Python HTTP Web Services - urllib, httplib2

Web scraping with Selenium for checking domain availability

REST API : Http Requests for Humans with Flask

Blog app with Tornado

Multithreading ...

Python Network Programming I - Basic Server / Client : A Basics

Python Network Programming I - Basic Server / Client : B File Transfer

Python Network Programming II - Chat Server / Client

Python Network Programming III - Echo Server using socketserver network framework

Python Network Programming IV - Asynchronous Request Handling : ThreadingMixIn and ForkingMixIn

Python Coding Questions I

Python Coding Questions II

Python Coding Questions III

Python Coding Questions IV

Python Coding Questions V

Python Coding Questions VI

Python Coding Questions VII

Python Coding Questions VIII

Python Coding Questions IX

Python Coding Questions X

Image processing with Python image library Pillow

Python and C++ with SIP

PyDev with Eclipse

Matplotlib

Redis with Python

NumPy array basics A

NumPy Matrix and Linear Algebra

Pandas with NumPy and Matplotlib

Celluar Automata

Batch gradient descent algorithm

Longest Common Substring Algorithm

Python Unit Test - TDD using unittest.TestCase class

Simple tool - Google page ranking by keywords

Google App Hello World

Google App webapp2 and WSGI

Uploading Google App Hello World

Python 2 vs Python 3

virtualenv and virtualenvwrapper

Uploading a big file to AWS S3 using boto module

Scheduled stopping and starting an AWS instance

Cloudera CDH5 - Scheduled stopping and starting services

Removing Cloud Files - Rackspace API with curl and subprocess

Checking if a process is running/hanging and stop/run a scheduled task on Windows

Apache Spark 1.3 with PySpark (Spark Python API) Shell

Apache Spark 1.2 Streaming

bottle 0.12.7 - Fast and simple WSGI-micro framework for small web-applications ...

Flask app with Apache WSGI on Ubuntu14/CentOS7 ...

Selenium WebDriver

Fabric - streamlining the use of SSH for application deployment

Ansible Quick Preview - Setting up web servers with Nginx, configure enviroments, and deploy an App

Neural Networks with backpropagation for XOR using one hidden layer

NLP - NLTK (Natural Language Toolkit) ...

RabbitMQ(Message broker server) and Celery(Task queue) ...

OpenCV3 and Matplotlib ...

Simple tool - Concatenating slides using FFmpeg ...

iPython - Signal Processing with NumPy

iPython and Jupyter - Install Jupyter, iPython Notebook, drawing with Matplotlib, and publishing it to Github

iPython and Jupyter Notebook with Embedded D3.js

Downloading YouTube videos using youtube-dl embedded with Python

Machine Learning : scikit-learn ...

Django 1.6/1.8 Web Framework ...









Contact

BogoToBogo
contactus@bogotobogo.com

Follow Bogotobogo

About Us

contactus@bogotobogo.com

YouTubeMy YouTube channel
Pacific Ave, San Francisco, CA 94115

Pacific Ave, San Francisco, CA 94115

Copyright © 2024, bogotobogo
Design: Web Master