0

Flask と BlueMix を使用して Web アプリをデプロイします。私が理解できないように見えるいくつかのjsの問題があります。ブラウザコンソールで同じエラーが発生し続けます。私はjsを知らないので、助けていただければ幸いです。

jquery-1.11.1.min.js:4 POST http://newfla.mybluemix.net/ 405 (Method Not  Allowed)
send @ jquery-1.11.1.min.js:4
m.extend.ajax @ jquery-1.11.1.min.js:4 
(anonymous function) @ demo.js:66
m.event.dispatch @ jquery-1.11.1.min.js:3
r.handle @ jquery-1.11.1.min.js:3

これが想定される(無名関数)です

 $.ajax({
  type: 'POST',
  data: {
    text: $content.val()
  },
  url: '/',
  dataType: 'json',
  success: function(response) {
    $loading.hide();

    if (response.error) {
      showError(response.error);
    } else {
      $results.show();
      showTraits(response);
      showTextSummary(response);
      showVizualization(response);
    }

  }

更新:あなたの提案に一致するいくつかの異なることを試しました。これが私が今いる場所です、何かアイデアはありますか?

consumer_token = 'aaaaaaaaaaaaaaaaaaaaaaaaa' #substitute values from twitter     website 
consumer_secret = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
access_token = '3473558363-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
access_secret = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'

auth = tweepy.OAuthHandler(consumer_token,consumer_secret)
auth.set_access_token(access_token,access_secret)

api  = tweepy.API(auth)

class PersonalityInsightsService:
"""Wrapper on the Personality Insights service"""

def __init__(self, vcapServices):
"""
Construct an instance. Fetches service parameters from VCAP_SERVICES
runtime variable for Bluemix, or it defaults to local URLs.
"""


self.url = "https://gateway.watsonplatform.net/personality-insights/api"
self.username = "aaaaaa-vvvv-1111-2222-mmmmmmmm"
self.password = "password"

if vcapServices is not None:
    print("Parsing VCAP_SERVICES")
    services = json.loads(vcapServices)
    svcName = "personality_insights"
    if svcName in services:
        print("Personality Insights service found!")
        svc = services[svcName][0]["credentials"]
        self.url = svc["url"]
        self.username = svc["username"]
        self.password = svc["password"]
    else:
        print("ERROR: The Personality Insights service was not found")
def getProfile(self, text):
    """Returns the profile by doing a POST to /v2/profile with text"""

    if self.url is None:
        raise Exception("No Personality Insights service is bound to this app")
    response = requests.post(self.url + "/v2/profile",
                      auth=(self.username, self.password),
                      headers = {"content-type": "text/plain"},
                      data=text
                      )
    try:
        return json.loads(response.text)
    except:
        raise Exception("Error processing the request, HTTP: %d" % response.status_code)

class DemoService(object):
    """
    REST service/app. Since we just have 1 GET and 1 POST URLs,
    there is not even need to look at paths in the request.
    This class implements the handler API for cherrypy library.
    """

    screen_name = "realDonaldTrump"
    maxnumtweets= 500

    saveFile = open("static/public/text/en.txt",'a')
    saveFile.seek(0)
    saveFile.truncate()


    for status in     tweepy.Cursor(api.user_timeline,id=screen_name).items(maxnumtweets): 
    print status.text[0:2] + '\n'
    saveFile = open("static/public/text/en.txt",'a')

    textyt = status.text

    texty = ''.join(i for i in textyt if ord(i)<128)
    saveFile.write(texty.encode('utf-8')+'\n'+'\n')
    saveFile.close()

def __init__(self, service):
    self.service = service
    self.defaultContent = None

    try:
        contentFile = open("static/public/text/en.txt", "r")
        self.defaultContent = contentFile.read()
    except Exception as e:
        print "ERROR: couldn't read text file: %s" % e
    finally:
        contentFile.close()

def GET(self):
   return render_template('newin.html', content= self.defaultContent)




def POST(self, text=None):
    """
    Send 'text' to the Personality Insights API
    and return the response.
    """
    try:
        profileJson = self.service.getProfile(text)
        return json.dumps(profileJson)
    except Exception as e:
        print "ERROR: %s" % e
        return str(e)


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

@app.route('/getpost', methods=['GET', 'POST'])
def new():
    personalityInsights = PersonalityInsightsService(os.getenv("VCAP_SERVICES"))
c = DemoService(personalityInsights)
if request.method == 'GET':
    return c.GET()
elif request.method == 'POST':
    return c.POST()
4

1 に答える 1

4

これは Javascript の問題ではありません。ルート URL を提供している表示機能が、POST要求を受け入れるように構成されていません。応答コード 405 はMETHOD NOT ALLOWED(ここでのメソッドは、、、、、、などとはPOST対照GET的です...PUTDELETEOPTIONSHEAD

非常にシンプルなHello World Flaskアプリで再作成できます

app.py:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World'

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

コマンド ラインからアプリを実行します (で利用可能になりますhttp://localhost:5000/):

python app.py

requests次に、別の端末から(ライブラリを使用して)投稿しようとしています:

import requests

response = requests.post('http://localhost:5000/', data='')

印刷応答は次のようになります。

<Response [405]>

注意してください405- あなたが受け取ったのと同じ応答コード、メソッドは許可されていません。デコレーターGETを更新して、Flask ビューで使用するメソッド以外のメソッドを明示的に定義する必要があります。app.route

@app.route('/', methods=['GET', 'POST'])
def hello_world():
    return 'Hello World'

POSTただし、通常、クライアントが の代わりにを実行する場合は、別の機能を実装する必要がありますGET。これを行うには、以下を参照してrequest.methodください (インポートも必要ですrequest)。

from flask import Flask, request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def hello_world():
    if request.method == 'GET':
        return 'You GOT hello world'
    elif request.method == 'POST':
        return 'You POSTed hello world'

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

さまざまな HTTP メソッドについて詳しく知りたい場合は、ここで定義されています。

于 2015-11-07T19:06:09.870 に答える