How to use AJAX with Google App Engine (Python)

前端 未结 2 1286
被撕碎了的回忆
被撕碎了的回忆 2020-12-25 08:08

I am completely novice at AJAX. I am familiar with HTML/CSS, jQuery and beginner at GAE and Python.

In an effort to understand how AJAX works, I would like to know h

2条回答
  •  春和景丽
    2020-12-25 08:48

    Ok Sir here we go... A simple app with one story and infinite votes... ;-)

    app.yaml

    application: anotherappname
    version: 1
    runtime: python27
    api_version: 1
    threadsafe: true
    
    default_expiration: "0d 0h 5m"
    
    libraries:
    - name: jinja2
      version: latest
    
    - name: webapp2
      version: latest
    
    handlers:
    - url: .*
      script: main.app
    

    main.py

    import logging
    from controllers import server
    from config import config
    import webapp2
    
    
    app = webapp2.WSGIApplication([
            # Essential handlers
            ('/', server.RootPage),
            ('/vote/', server.VoteHandler)
        ],debug=True, config=config.config)
    
    
    # Extra Hanlder like 404 500 etc
    def handle_404(request, response, exception):
        logging.exception(exception)
        response.write('Oops! Naughty Mr. Jiggles (This is a 404)')
        response.set_status(404)
    
    app.error_handlers[404] = handle_404
    

    models/story.py

    from google.appengine.ext import ndb
    
    
    class Story(ndb.Model):
        title = ndb.StringProperty(required=True)
        vote_count = ndb.IntegerProperty(default = 0)
    

    controllers/server.py

    import os
    import re
    import logging
    import config
    import json
    
    import webapp2
    import jinja2
    
    from google.appengine.ext import ndb
    from models.story import Story
    
    
    class RootPage(webapp2.RequestHandler):
        def get(self):
            story = Story.get_or_insert('Some id or so', title='A voting story again...')
            jinja_environment = self.jinja_environment
            template = jinja_environment.get_template("/index.html")
            self.response.out.write(template.render({'story': story}))
    
    
        @property
        def jinja_environment(self):
            jinja_environment = jinja2.Environment(
                loader=jinja2.FileSystemLoader(
                    os.path.join(os.path.dirname(__file__),
                                 '../views'
                    ))
            )
            return jinja_environment
    
    
    class VoteHandler(webapp2.RequestHandler):
        def post(self):
            logging.info(self.request.body)
            data = json.loads(self.request.body)
            story = ndb.Key(Story, data['storyKey']).get()
            story.vote_count += 1
            story.put()
            self.response.out.write(json.dumps(({'story': story.to_dict()})))
    

    and finally

    views/index.html

    
    
        
            
            
            
        
        
            

    {{story.title}}

    {{story.vote_count}} | Vote Up Story

    Assemble, read it's simple enough and run. If you need a working git example just comment.

    githublink (as from comments)

提交回复
热议问题