Ich bin gerade dabei zur Übung eine Ajax-Anwendung mit Bottle und jQuery zu basteln. Allerdings bekomm ich immer diesen Traceback, wenn ich die Anwendung starte und localhost:8080 aufrufe:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Python27\lib\wsgiref\handlers.py", line 85, in run
self.result = application(self.environ, self.start_response)
TypeError: 'str' object is not callable
Das ist mein Code:
Code: Alles auswählen
import json
from bottle import route, run, request
@route('/')
def index():
return """
<html>
<script type="text/javascript"
src="http://code.jquery.com/jquery-1.5.1.min.js"></script>
<script type="text/javascript">
function sendjs() {
$.post('/rate',
{ rating: $("select").val() },
function(data) {
$("#rating").html("Average rating: "+data.average+"; ratings: "+data.ratings);
},
'json'
};
</script>
<body>
<select>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
<input type="submit" onclick="sendjs()" />
<div id="rating">
</div>
</body>
</html>
"""
@route('/rate', method="POST")
def rate():
rating = request.POST['rating']
with open("rating.json", "r") as f:
rating_data = json.load(f)
average = rating_data['average']
ratings = rating_data['ratings']
try:
rating_data['average'] = (average * ratings + int(rating)) / (ratings + 1)
except ValueError:
return {'average': 'NaN', 'ratings': '--'}
rating_data['ratings'] += 1
with open("rating.json", "w") as f:
json.dump(rating_data, f)
return {'average': rating_data['average'], 'ratings': rating_data['ratings']}
run('localhost', port=8080)
Woran kann es denn liegen? Ich finde in meinem Code keinen Fehler.
Liebe Grüße,
nomnom
Edit:
Ach ja, rating.json sieht so aus:
Code: Alles auswählen
{
"average": 0.0,
"ratings": 0
}