And yes, stop work if a client fails to pay. It's so tempting to say, "Well, they're nice, and if I just do xyz for them, they'll pay." No, you've found a deadbeat client. Join the club.
But there are other parts of this with which I'll disagree.
Chief among them: Contracts are important, but I see them as a formality more than anything else. If I have to sue a client, then it's all over anyway; the time and legal fees won't be worth chasing. I work with people with whom I get along and (generally) have mutual trust.
Also: I've consistently charged at the top of the market for the last few years. Some clients don't want to pay top dollar for Python training, but others do -- and the ones who do are the easiest to work with, who understand that they're spending a lot, but also getting a huge ROI.