python - flask jquery GET 404 -


i'm playing jquery in flask , have been making use of simple example found on runnable of adding 2 numbers together.

i'm using flask-appbuilder , have view setup display template, works fine. included jquery code template , displays should.

on flask side created view, , functions in view render template , receive variables in jquery request.

when click jquery link on template add 2 number together, see 404 error in python console.

[07/apr/2017 09:48:53] "get /_add_numbers?a=1&b=1 http/1.1" 404 - 

here's have in template:

{% extends "appbuilder/base.html" %}  {% block content %}     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>     <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"           rel="stylesheet">   <script type=text/javascript>     $(function() {       $('a#calculate').bind('click', function() {         $.getjson('/_add_numbers', {           a: $('input[name="a"]').val(),           b: $('input[name="b"]').val()         }, function(data) {           $("#result").text(data.result);         });         return false;       });     });   </script>    <body>     <div class="container">       <div class="header">         <h3 class="text-muted">how manage json requests</h3>       </div>       <hr/>       <div>       <p>     <input type="text" size="5" name="a"> +     <input type="text" size="5" name="b"> =     <span id="result">?</span>     <p><a href="javascript:void();" id="calculate">calculate server side</a>       </form>       </div>     </div>   </body> </html> {% endblock %} 

my flask view looks this:

class myview(baseview):     default_view = 'sale'      @expose('/sale', methods=['get'])     @has_access     def sale(self):         return self.render_template('sale.html')      @expose('/_add_numbers', methods=['get', 'post'])     @has_access     def add_numbers(self):         = request.args.get('a', 0, type=int)         b = request.args.get('b', 0, type=int)         return jsonify(result=a + b) 

any guidance appreciated.

get screenshot - https://imgur.com/a/0rxin

post screenshot - http://imgur.com/ns1beke

you using flask-appbuilder , syntax suggested is:

class myview(baseview):     route_base = "/myview"      @expose('/method1/<string:param1>')     def method1(self, param1):         # param1         # , return         return param1 

which results in url looking this: http://<your_host>/myview/method1/<awaiting string param>

that interferes url.


a bit more thorough explanation:

get request tries locate /_add_numbers?a=1&b=1 url far back-end concerned not match exposed url.
should try defining exposed url follows:

@expose('/_add_numbers?<int:a>&<int:b>', methods=['get', 'post'])  

if flask-appbuilder gives problems, try experiment default flask , see if works you, knowledge move forward.


note:

typically not get post request.

you can try simple jquery $.post() call instead of getjson:

$.post('http://localhost:5000/_add_numbers',{     a: $('input[name="a"]').val(),     b: $('input[name="b"]').val() }, function(data) {     $("#result").text(data.result); }); 

the no 'access-control-allow-origin' header present on requested resource. error has been referred , answered thoroughly in posts:


Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -