Python строка равна нулю, но также не является ни пустой, ни пустой строкой - PullRequest
0 голосов
/ 30 апреля 2020
class StartAnalysis(BaseHandler):
    def post(self):
        playlist = self.request.get('playlist')
        language = self.request.get('language')

Если я сделаю запрос POST без этого поля playlist, то это произойдет:

>>> playlist
null
>>> type(playlist)
<type 'unicode'>
>>> playlist is None
False
>>> not playlist
False
>>> playlist == ''
False
>>> playlist == u''
False

Как я должен проверить, что это None? И почему он говорит, что он нулевой, а не None?

Я использую AppEngine.

Мой javascript код, выполняющий запрос POST:

let params = new URLSearchParams(location.search);
let url_id = params.get('id');
let url_language = params.get('language');
const url = 'http://localhost:8080/start-analysis?playlist=' + url_id + '&language=' + url_language;
$.ajax({
    url: url,
    type: 'POST',
    success: function(results) {
       ...
    },
    error: function(error) {
       ...
    }
});

1 Ответ

1 голос
/ 03 мая 2020

Я переключился на использование application/json для запросов POST вместо значения по умолчанию application/x-www-form-urlencoded, и это, казалось, решило проблему запроса, отправляющего строку "null" вместо просто пустой строки, когда один из параметров был пуст или отсутствует.

let params = new URLSearchParams(location.search);
let url_id = params.get('id');
let url_language = params.get('language');
const url = 'http://localhost:8080/start-analysis';
$.ajax({
    url: url,
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json',
    data: JSON.stringify({'playlist': url_id,'language': url_language}),
    success: function(results) {
        ...
    },
    error: function(response, status, error) {
        ...
    }
});

И сервер получает его как:

class StartAnalysis(BaseHandler):
    def post(self):
        data = json.loads(self.request.body)
        playlist = data['playlist']
        language = data['language']

...