mardi 14 juin 2016

jQuery Flask example not working

I've been trying to get this jQuery Flask example found here to work, but for some reason I can't! I've changed the files a bit so they work with how I've set up my Flask application... where the structure of everything is:

~/test
   |-- run.py
   |__ /venv
   |__ /app
         |-- __init__.py
         |__ /templates
                |-- layout.html
                |-- index.html
         |__ /views
                |-- addnumbers.py

With run.py:

from flask_failsafe import failsafe

@failsafe
def create_app():
    from app import app

    return app

if __name__ == '__main__':
    create_app().run(debug=True)

__init__.py:

from flask import Flask, render_template
import os, sys

app = Flask(__name__)

def is_module(path):
    init_path = os.path.join(path, '__init__.py')

    if os.path.isdir(path) and os.path.exists(init_path):
        return True
    elif os.path.isfile(path) and os.path.splitext(path)[1] == '.py':
        return True

    return False

def import_module(name, globals=globals(), locals=locals(), 
    fromlist=[], level=-1):
    __import__(name)

    return sys.modules[name]

def register_views(app, path, extension=''):
    app_path = os.path.dirname(os.path.abspath(app.root_path))

    for filename in os.listdir(path):
        file_path = os.path.join(path, filename)
        if is_module(file_path):
            module_name = os.path.splitext(file_path)[0]
            module_name = os.path.relpath(module_name, app_path)
            module_name = module_name.replace('/', '.')
            blueprint   = getattr(import_module(module_name), 'blueprint', None)

            if blueprint:
                app.register_blueprint(blueprint)

path = os.path.dirname(os.path.abspath(__file__))
register_views(app, os.path.join(path, 'views'))

addnumbers.py

from flask import Flask
from flask import render_template, jsonify, request, Blueprint

blueprint = Blueprint("addnumbers", __name__)

@blueprint.route('/_add_numbers')
def add_numbers():
    """Add two numbers server side, ridiculous but well..."""
    a = request.args.get('a', 0, type=int)
    b = request.args.get('b', 0, type=int)
    return jsonify(result=a + b)


@blueprint.route('/')
def index():
    return render_template('index.html')

and layout.html and index.html are taken from the example above. I can see the example fine as shown below, but it just doesn't work and I don't know why. When I click the calculate server side link it doesn't do anything, so instead of adding the two numbers and showing the result it just keeps showing the ?. The console in Chrome gives the following error:

jquery.min.js:4 GET http://localhost:5000/_add_numbers?a=1&b=2 404 (NOT FOUND)

I create the application by running run.py for anyone that wants to try it out.

enter image description here

Aucun commentaire:

Enregistrer un commentaire