Contreras went 2-for-4 with a walk and a solo home run, his 17th. Paul Goldschmidt hit his 23rd homer, Masyn Winn hit his first major league blast and Nolan Gorman added a three-run shot, his 27th, that put the game away in the eighth inning.
Goldschmidt, Nolan Arenado and Alec Burleson also had multi-hit games for the Cardinals, who had 14 hits and scored double-digit runs for the second consecutive game.
Dakota Hudson (6-1) pitched five innings and allowed five runs on seven hits, three walks and two strikeouts. It was Hudson's first career win against Atlanta.
The Cardinals jumped on Atlanta ace Spencer Strider for four runs in the first inning. Goldschmidt hit a two-run home to start the game. St. Louis added runs on Contreras' infield grounder and a run-scoring single from Burleson.
Strider (16-5) worked only 2 2/3 innings, matching his shortest start of the season, and allowed six runs on six hits, three walks and five strikeouts, ending his four-game winning streak.
St. Louis added two more runs in the third inning and knocked Strider out of the game. Contreras had an RBI single, and Burleson lined into a force that scored a run.
The Braves cut the lead to 6-2 in the fourth on a run-scoring double by Marcell Ozuna and a fielder's choice by Orlando Arcia.
The Cardinals pushed their lead to 7-2 on Winn's home run in the top of the sixth, but Atlanta responded with three runs in the bottom half on Matt Olson's 46th home run and a two-run single by Michael Harris II.
Olson has homered in three straight games and joins Andruw Jones, Hank Aaron and Eddie Mathews as the only Braves to hit 46-plus homers in a season.
Contreras homered in the seventh, but Atlanta answered in the bottom half on Austin Riley's 34th home run.
—Field Level Media