Django,Tornado和Flask是Python里比较著名的三个Web开发框架,本文我主要介绍Django里最重要的一些基本概念。
总览
下图是从用户输入网址到服务器返回结果的Django流程图。Django里几个重要的概念都涉及到了,接下来我就逐个说说。
URLconf
URLconf其实就是起地址定向(或叫配对)的作用,浏览器中输入的不同地址定向到不同的处理逻辑上。
例如,下面定义了网址根目录下的定向方法:
urlpatterns = [
url(r'^polls/', include('polls.urls', namespace='polls')),
url(r'^admin/', include(admin.site.urls)),
]
而下面的代码又定义了polls.urls里的二级目录定向方法:
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^login/$', views.login, name='login'), ##
url(r'^register/$', views.register, name='register'),
url(r'^logout/$', views.logout, name='logout'),
]
所以,像127.0.0.1:8000/polls/login/就会由指定的视图函数views.login来处理。
模型(Model)
一个模型对应着一个数据库中的表,所以也可以说模型就是数据。
例如,下面定义了一个Django模型:
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
它对应的数据表如下:
CREATE TABLE "polls_question" (
"id" serial NOT NULL PRIMARY KEY,
"question_text" varchar(200) NOT NULL,
"pub_date" timestamp with time zone NOT NULL
);
模板(Template)
模板可以理解为HTML模板。模板接收一些输入数据,然后最终产生返回给用户的HTML页面。
例如,下面是一个简单的登录模板,里面用到了Django的模板语言:
模板可以像OOP里的类一样,可重用。具体可参见“extends”说明。
视图(View)
真正处理浏览器请求的是视图。视图接收请求数据,调用其他模块产生结果数据,然后再把结果数据传给模板,由模板最终产生返回给用户的HTML页面。
例如,下面是一个简单的注册视图:
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
new_user = form.save()
return HttpResponseRedirect("/polls")
else:
form = UserCreationForm()
return render(request, "polls/register.html", {'form': form})
表单(Form)
表单其实不算个重要组件,它只是为了使用方便才被创造出来的。例如我们上面视图里就用到了一个表单UserCreationForm,这个表单帮助创建出简单的注册表单。下面是效果图:
References