Получить значение пользовательского параметра в заголовке POST и использовать в коде Python - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь проанализировать пользовательскую переменную локализации либо в заголовке, либо в полезной нагрузке JSON, а затем получить значение этой пользовательской переменной на стороне сервера, чтобы выполнить некоторые действия в зависимости от ее значения.

Некоторые варианты request.headers.get уже пробовали:

locale = request.headers.get(u"Locale", "None") 
locale = request.headers[u"Locale"]
locale = request.get_json()[u"Locale"]

Код на стороне клиента (код скрипта Google Apps). «Locale» - это пользовательская переменная, которую я пытаюсь проанализировать:

function queryDb2(query) {
  Session.getEffectiveUser().getEmail();
  var params = {
    'method': 'POST',
    'validateHttpsCertificates': false,
    'muteHttpExceptions': true,
    'contentType': 'application/json',
    'headers': {"Authorization": "Bearer " + ScriptApp.getOAuthToken(), "Locale": SpreadsheetApp.getActive().getSpreadsheetLocale()},
    'payload': JSON.stringify({'query': query, 'Locale': SpreadsheetApp.getActive().getSpreadsheetLocale()})
  };

  var result = UrlFetchApp.fetch(getServicesAppDb2Url(), params);
  return JSON.parse(result); 
}

Код на стороне сервера (Python с использованием Flask).

def db2():
    try:
        # make sure the request is valid
        if request.get_json().get(u"query", False) and request.headers.get('Authorization', False):
            query = request.get_json()[u"query"]
            token = request.headers[u"Authorization"][7:]  # [7:] to remove the "Bearer " string before the token.
            locale = request.headers.get(u"Locale", "None") # Gets the language of the user who queries
            # make sure the domain of the user who queries the API is allowed.
            if auth.is_token_valid(token):
                # connect to the database
                connection = db.get_odbc_connection()
                # run query
                logging.info(query)
                logging.info(locale)
                data = db.query_db(connection, query)
                # format data
                js = json.dumps(data)
                return Response(js, status=200, mimetype='application/json')
            else:
                logging.error("Auth with token failed.")
                return Response("Token is not valid.", status=401, mimetype='text/plain')
        else:
            logging.error("The request received is not valid. It either miss body data (query) or auth header")
            return Response("Invalid request.", status=400, mimetype='text/plain')
    except Exception:
        logging.error(u"An exception has been raised. Stacktrace: {}".format(traceback.format_exc()))
        return Response("An internal server error occured. Please contact the server administrator and inform them of"
                        " the time the error occured. ERROR: {}".format(traceback.format_exc()),
                        status=500, mimetype='text/plain')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...