Fwd: How to specify JSON parameters in CallBack?
Chris Angelico
rosuav at gmail.com
Sun Dec 13 13:25:02 EST 2020
On Mon, Dec 14, 2020 at 4:57 AM Ethan Furman <ethan at stoneleaf.us> wrote:
>
> From: Caleb Gattegno
> Date: Fri, Dec 11, 2020 at 5:02 PM
> Subject: How to specify JSON parameters in CallBack?
>
>
> Please can you suggest where should I look for advice on converting a old style web app which vends whole pages of html
> with a cgi-bin/python script invoked bypython3 server.py, into one that only serves callbacks to this Javascript AJAX
> async RPC call:
>
> $('#compute').click(function() {
> $('#poly').val('Waiting...');
>
> var seq = $('#seq').val();
> console.log(seq);
> $.post('/compute', seq, function(result) {
> $('#poly').val(result.poly);
> }, 'json');
> });
>
> I don’t want to touch the html/javascript, but I’d like to update the python cgi code module to respond to the RPC call
> in the post by returning a json data structure. Poly is a string of variable length.
>
First place to look would be a well-known server framework. I use
Flask, but there are others. Figure out exactly what your front end is
sending; use your web browser's developer tools to inspect the
requests, and then code your back end to match.
Writing a JSON-based API in Flask is pretty straight-forward. Here's an example:
@app.route("/api/widgets")
def list_setups():
return jsonify(database.list_widgets())
@app.route("/api/widgets/<int:id>")
def get_widget(id):
return jsonify(database.get_widget(id))
@app.route("/api/widgets", methods=["POST"])
def create_widget():
if not request.json: return jsonify({}), 400
missing = {"name", "purpose"} - set(request.json)
if missing:
return jsonify({"error": "Missing: " + ", ".join(sorted(missing))}), 400
widget = database.create_widget(request.json["name"],
request.json["purpose"])
return jsonify(widget)
(For a real example, see
https://github.com/Rosuav/MustardMine/blob/master/mustard.py#L643 -
although that has a lot of other complexities.)
ChrisA
More information about the Python-list
mailing list