I know exactly what you mean about the databases and proper modeling. I ended up reading through a basic book[1] and it really gave me a good perspective on how to decide what objects in your model will have database tables, which ones should have foreign keys into others, how to think of the relationships involved, etc.
I think you're right that you need to have some understanding of these concepts before you can build a web app. But fortunately, it's not that tricky! Keep at it, you're almost there. :)
In particular, these 2 topics come to mind: - Algorithm design - Data structures
You can learn this discipline on your own, but you'll always be second rate to a developer who learned under tutelage from someone else. Whether it's in school or in the workplace, learning from others is incredibly valuable.
I think what gives the person with a teacher the advantage is the structure of the lessons. People, especially newbie coders, want to build Facebook on day 1 and they're crazy enough to actually attempt it! A person who can control that impulse will fare just as well as someone with a mentor I think. You can take a million baby steps and accomplish great things or you can take one giant leap and fall flat on your face.
Try going through the Flask tutorial (http://flask.pocoo.org/docs/) and see if it's easier to follow.
Here's some resources for getting started with Python (http://www.quora.com/How-can-I-learn-to-program-in-Python/an...).
And if you're a total newb and need to go over basic programming concepts in a simple language, try "Tcl for Web Nerds" (http://philip.greenspun.com/tcl/) -- it's what many Web developers cut their teeth on in the late 90s.
For database stuff, check out "SQL for Web Nerds" (http://philip.greenspun.com/sql/).
You first have to understand programming concepts themselves. This means iterations/loops, variables and assignment, etc.
Then you have to learn how language X implements those concepts. So you find out if you have to declare types and get the hang of the syntax itself.
Then you have to get into databases, how those work and the planning as you say.
On top of all that you then have to learn how MVC works which means you'd better get comfortable with OO programming, then learn at least 3 more languages if you don't know them already (HTML, CSS, js). Then you have to know how the server interacts with your code, and on and on. Oh, and don't let me forget learning your tools. The command line, your deployment tools (even if it's just FTP), version control, servers, and your text editor. There's a ton of stuff to wrap your head around just to write a simple blog script!
If you're new to programming and learning any framework you're screwed. You end up just copy-pasting code that you have no idea what it does and you haven't learned a thing. I think the article makes the real common sense point that in programming, just like any skill, you have to master the fundamentals before anything else. A lot of words and explanations just to say "learn the basics before moving on or you'll never learn anything". But I'm glad he said it, it was a good article and made sense.
I then took a step back and went to MIT's OCW courses that use Python to teach the basics of CS. None of the lectures introduced Django or other web frameworks, rather, they used Python as a means to teach core CS concepts. From there, I used the basics of what I learned to create simple scripts and conceptually understand what I was coding.
Then, I slowly ventured into Django tutorials. But even with the Django tutorials, I'm taking a step back because I'm having difficulty wrapping my head around databases, structuring data models, and basically, learning how to PLAN an app before I write code.
At the end of the day, I think it is really difficult to learn how to code on your own because it is so much more than learning syntax. This is where mentors and the community comes in. Mentors matter a whole lot more than great tutorials and working on a real project with other, more seasoned developers (basically, an apprenticeship) completes the circle of going from complete newbie to "entry level programmer".