A full-stack framework such as Rails or Django isn't going to help with learning because it 'magics' too much of the underlying structure of building a web app away. You end up using so many proprietary pieces, all of which "just work" (and don't worry how, just know that it does) together.
Conversely, micro-frameworks such as Sinatra and web.py (the structure of which inspired App Engine's webapp, and Friendfeed's Tornado) get rid of just enough of the underlying complexity of getting Ruby/Python to talk to a browser to, as is often said, let you feel as if you are writing a Python (or Ruby) web app, rather than a Django (or Rails) web app.
Perhaps the middle ground for your students is frameworks such as Flask and Pyramid, which start as a micro framework, but which offer the full-stack batteries included features as and when you need them.
I dunno if the magic is the real problem. I think the real problem with full-stack frameworks is that they require you to drink their entire pitcher of Kool-Aid in order to get up and running. There's no easy "Hello World" to give new users confidence.
Take Django for instance (because I have more experience with it than I have with Rails). Just to get through the introductory tutorial (https://docs.djangoproject.com/en/dev/intro/tutorial01/) you have to wrap your brain around projects, apps, views, models, and Django's command-line tools. Contrast that to getting started in PHP without a framework; you can introduce someone who only knows HTML to PHP extremely gently, by taking an existing HTML document (which they understand) and sprinkling in some PHP to do simple stuff. They won't be a programming god with that knowledge, of course, but that's not important; what's important is that they took the first step and succeeded, which gives them the confidence to take the second. With a full-stack framework, getting that first step right involves a lot of mental work, which increases the chances that people will screw it up or abandon it in frustration.
Frameworks frequently compound this problem by inventing their own terminology for features, or taking words people already use and redefining them, so you can't easily map things you already know from other systems to things inside the framework. Just in the Django intro, for instance, we have to learn the difference between projects and apps, both of which are commonly used terms that Django has overloaded with Django-specific meanings.
All of this means that taking the first step in going from "has never used Django" to "Django newbie" involves a lot of learning, and that guarantees that some people are going to just walk away and others are going to try to follow along but get lost in the complexity.
Thank you, this is really helpful feedback. I can learn any technology I want to, but since programming is not part of my daily professional work I often have a hard time knowing what pieces are worth my time to learn. I've been thinking about Flask and Pyramid for a while, so I will check them out with an eye towards sharing them with students.
A full-stack framework such as Rails or Django isn't going to help with learning because it 'magics' too much of the underlying structure of building a web app away. You end up using so many proprietary pieces, all of which "just work" (and don't worry how, just know that it does) together.
Conversely, micro-frameworks such as Sinatra and web.py (the structure of which inspired App Engine's webapp, and Friendfeed's Tornado) get rid of just enough of the underlying complexity of getting Ruby/Python to talk to a browser to, as is often said, let you feel as if you are writing a Python (or Ruby) web app, rather than a Django (or Rails) web app.
Perhaps the middle ground for your students is frameworks such as Flask and Pyramid, which start as a micro framework, but which offer the full-stack batteries included features as and when you need them.