[Flask] Help with simple example using AngularJS

Clint Olsen clint.olsen at gmail.com
Mon Jan 29 19:52:08 EST 2018


Hi:

I'm new to Flask and Angular and only done a little web-based programming,
so please forgive my lack of understanding. I've just cobbled together
examples from Flask as well as some examples online to come up with the
following.

I am interested in the most basic functionality of modifying a web form and
capturing that in the back-end to prove I can get data at least in one
direction:

*static/app.js*:

var app = angular.module('myApp', []);

app.controller('formCtrl', function($scope, $log, $http) {
    $scope.firstName = "John";

    $scope.SendData = function () {
        var data = { 'foo': $scope.firstName };

        var config = {
            headers : {
                'Content-Type':
'application/x-www-form-urlencoded;charset=utf-8;'
            }
        }

        $http.post('/', data, config)
            .success(function(results) {
            $log.log(results);
        })
        .error(function(error) {
            $log.log(error);
        });
    };
});

*static/index.html*:

<!doctype html>
<html>
    <head>
        <script src="
https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js
"></script>
                <script src="
http://code.angularjs.org/1.5.3/angular-route.min.js"></script>
                <script src="/static/app.js"></script>
                <link rel="stylesheet" href="/static/style.css" />
    </head>
    <body>
        <div ng-app="myApp" ng-controller="formCtrl">
        <form>
            First Name: <input type="text" ng-model="firstName">

            <button data-ng-click="SendData()">
                Send
            </button>
        </form>

        <h1>You entered: {{firstName}}</h1>

        <div>
    </body>
</html>

*app.py*:

from flask import Flask, request, send_file

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    print('Request: %s' % request.method)
    if request.method == 'POST':
        data = request.form.to_dict()
        print('First name from form is %s' % data)
        return 'OK'
    else:
        return send_file("static/index.html")

if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True)

This code (sort of) works, but the message I get from index() is kind of
weird, so maybe I'm not packaging the data payload correctly? In this
example I just populate the form with a "C":

Flask log:

Request: GET
127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /? HTTP/1.1" 200 -
127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /static/app.js HTTP/1.1" 200 -
127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /static/style.css HTTP/1.1" 200 -
Request: POST
First name from form is {'{"foo":"C"}': ''}
127.0.0.1 - - [29/Jan/2018 16:40:16] "POST / HTTP/1.1" 200 -

I'm not not quite sure why the key/value pair is embedded in a dictionary
as the key with an empty value.

Any pointers would be much appreciated!

Thanks,

-Clint
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/flask/attachments/20180129/214e7ae7/attachment.html>


More information about the Flask mailing list