让我先声明,我不懂Python,可能只看了一天的Python教程。情况是这样的:我的Angular应用在一个iframe中托管了一个由Apache托管的Python应用程序。我没有编写Python应用程序,但另一个开发人员为我编写了一个端点,我应该能够从我的Angular应用程序中进行发布。
制作Python端点的开发人员说我的请求有问题,但我相当确定没有任何问题。我几乎可以肯定问题在于响应中没有CORS头和/或响应未设置为响应OPTIONS方法。以下是整个Python端点的全部内容:
我尝试了以下方法使其工作:我在两个start_response函数中添加了更多的头部信息,现在代码看起来像这样:
制作Python端点的开发人员说我的请求有问题,但我相当确定没有任何问题。我几乎可以肯定问题在于响应中没有CORS头和/或响应未设置为响应OPTIONS方法。以下是整个Python端点的全部内容:
import os, site, inspect
site.addsitedir(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))+"/../")
import json
from datetime import datetime
import pymongo
from Config import Config
def application(environ, start_response):
response = environ['wsgi.input'].read(int(environ['CONTENT_LENGTH']))
if response:
json_response = json.loads(response)
document = {
'payment_id': json_response['payment_id'],
'log': json_response['log'],
'login_id': json_response['login_id'],
'browser': environ.get('HTTP_USER_AGENT', None),
'ip_address': environ.get('REMOTE_ADDR', None),
'created_at': datetime.utcnow(),
}
client = pymongo.MongoClient(Config.getValue('MongoServer'))
db = client.updatepromise
db.PaymentLogs.insert(document)
start_response('200 OK', [('Content-Type', 'application/json')
return '{"success": true}'
start_response('400 Bad Request', [('Content-Type', 'application/json')])
return '{"success": false}'
我尝试了以下方法使其工作:我在两个start_response函数中添加了更多的头部信息,现在代码看起来像这样:
start_response('201 OK', [('Content-Type', 'application/json',
('Access-Control-Allow-Headers','authorization'),
('Access-Control-Allow-Methods','HEAD, GET, POST, PUT, PATCH, DELETE'),
('Access-Control-Allow-Origin','*'),
('Access-Control-Max-Age','600'))])
注意:我一开始尝试使用200和400响应,但在响应中没有看到任何变化,然后出于好奇,我决定将200更改为201,但这也没有在响应中显示,因此我怀疑某些原因导致此代码根本没有运行。
请帮帮我,我是python新手。
补充说明,我想这会有所帮助,这是响应中头部的样子:
General:
Request URL: http://rpc.local/api/payment_log_api.py
Request Method: OPTIONS
Status Code: 200 OK
Remote Address: 10.1.20.233:80
Referrer Policy: no-referrer-when-downgrade
Response Headers:
Allow: GET,HEAD,POST,OPTIONS
Connection: Keep-Alive
Content-Length: 0
Content-Type: text/x-python
Date: Fri, 27 Apr 2018 15:18:55 GMT
Keep-Alive: timeout=5, max=100
Server: Apache/2.4.18 (Ubuntu)
Request Headers:
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Access-Control-Request-Headers: authorization,content-type
Access-Control-Request-Method: POST
Connection: keep-alive
Host: rpc.local
Origin: http://10.1.20.61:4200
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36