DjangoTornadoFlask是Python里比较著名的三个Web开发框架,本文我主要介绍Django里最重要的一些基本概念。

总览

下图是从用户输入网址到服务器返回结果的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的模板语言: 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