Things I've learned...
-Charge by the job ($1000+ is fair indeed for a modest site, if you are a skilled individual), not by the hour. 2 hours spent fixing a ridiculous IE bug isn't something the client really cares to know about or pay hourly for.
-Do use a contract, outlying exactly what functionality the client will get with the site (Because later they will ask for more, and they ought to pay for it). If it is not in the contract, it is not part of the deal.
-Do your job well (a given? Perhaps). Write code that will be good for future editing.
-It's alright to take a small hit sometimes for the sake of customer satisfaction (especially when you didn't cover the bases), with things like "Look man, tell ya what... I'll give this one to ya."
-Consider offering 'maintenance plans' -- monthly payment for sustained support and added functionality (particularly for stuff like e-commerce, blogs, forums...
-Give the client ideas. Inform them. There are things that non-web-folks don't even know would be really great to have in their site. Or conversely, things that are utterly horrible to have in their site (FLASH!). Mention things freely and often. They will often like the ideas and pay you to do them.