data - (необязательно) словарь, список кортежей, байтов или файлоподобный объект для отправки в теле запроса.
В обоих случаях вы не передаете толковый словарь. Вы передаете строку оба раза.
r = requests.post(url = myurl, data = '{"title":"sometitle", "body":"some body"}')
Это словарь, разобранный в строку.
t = "title"
b = "body"
r = requests.post(url = myurl, data = '{"title":title, "body":body}')
Это недопустимый словарь, разобранный в строку. Вы, вероятно, хотели написать:
t = "title"
b = "body"
r = requests.post(url = myurl, data = {"title":title, "body":body})
Что эквивалентно:
r = requests.post(url = myurl, data = {"title":"title", "body":"body"})
Здесь вы будете передавать словарь и также можете ссылаться на переменные. Это не строка, которую вы передаете.
Если вам требуется, чтобы данные были в строковом формате (что не имеет смысла, поскольку в документации, на которую вы ссылаетесь, требуется словарь), вы делаете:
t = "title"
b = "body"
r = requests.post(url = myurl, data = json.dumps({"title":title, "body":body}))