WORDPRESSからAjaxでPythonへリクエスト。DBデータをJSON形式にしてAjaxへ返却

Python WSGI SCRIPTで依頼元からAjax経由でJSONで受取り、DBから引用したデータをJSONデータにして返却するサンプル。呼び出し元はWordPressなどでAjax記述で呼び出して、コールバックしたものをWordPressに表示する。尚、DBはSQLObjectのORMapperを利用しています。

WORDPRESSの固定ページ、記事に直接Javascriptを記述できないのでプラグインを導入して利用できるようにします。
尚inline-jsと言うプラグインを使用しています。
このプラグインを導入します

WORDPRESSで呼び出すAjax

[inline]
[script type="text/javascript"]
jQuery(function(){
  jQuery('#get_search_json').click(function(){
    var data = jQuery("#job").val();
    var url = '/search/get_jobs';
    jQuery.getJSON(url,
          { 'job': data }, 
          function(data){
           for(var i in data){
               for( var key in data[i]){
                    jQuery('#result').append(jQuery('<p>').html(key +': '+ data[i][key]));
               }
               jQuery('#result').append("<hr>");
           }
    });
  });
});
[/script]
[/inline]



JOBの種類:<input type="text" id="job" />
<button id="get_search_json">JOB検索</button>
<div id="result" style="border: 2px solid #595">
[結果出力]
</div>

Ajaxで裏側で呼び出すAPI(WSGI SCRIPT)  url:/search/get_jobs – index.wsgi

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import cgi
from sqlobject import *
import datetime
import json
import pprint
sqlobject_encoding="utf8"
#SQLObjectのバグでURLにcharsetをつけないと日本語コードが文字化けする。
sqlobject_url = "mysql://xxxx:xxxxxxxxxxxxxxxxx@localhost/nms_test?charset=%s" % sqlobject_encoding
sqlhub.processConnection = connectionForURI( sqlobject_url )

class Jobs(SQLObject):
      class sqlmeta:
        table = "jobs"
        fromDatabase = True

def application(environ,start_response):
      query = cgi.parse_qs(environ.get('QUERY_STRING'))
      status = '200 OK'
      response_headers = [('Content-type', 'application/json;charset=utf8')]
      listdat = []
      i = 0
      for b in  Jobs.select( Jobs.q.jobcategoryAlias == query['job'][0] ):
          if i > 4:
             break
          json_data ={'id':b.id,
                      'catch_copy':b.catchCopy,
                      'jobcategorysummary':b.jobcategorysummary,
                      'profile':b.mysummary,
                      'work_history':b.worksummary,
                      'requirement':b.description,
                      'position':b.position
                     }
          listdat.append(json_data)
          i += 1

      start_response(status,response_headers)
      data = json.dumps(listdat,indent=7,ensure_ascii=False )
      return data

WSGI SCRIPTのApache Web Serverへの設定

スクリプトは/etc/httpd/conf.d/wsgi.confへ以下のように追記します

LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias /search/get_jobs /var/www/vhosts/wp2.alpscd.co.jp/index.wsgi