1、创建一个简单视图
这章是按照DgangoBook的说明。在我们创建的工程目录下面DjangoE_1(这是我为自己的工程命名的名字)新建一个view.py的文件,并在该文件下添加如下代码
from django.http import HttpResponsedef hello(request): return HttpResponse("hello world")
熟悉HTTP的话知道HttpResponse是服务器到返回到客户端的应答,而request是客户端到服务器的请求。
我们添加了视图的显示信息,可是Django怎样映射到我们的视图上?我们在生成的工程目录下面发现了那个叫urls.py的文件。这就是视图和控制的映射文件。打开后我们看到默认生成的代码:
from django.conf.urls import patterns, include, urlfrom django.contrib import adminadmin.autodiscover()urlpatterns = patterns('', # Examples: # url(r'^$', 'DjangoE_1.views.home', name='home'), # url(r'^blog/', include('blog.urls')), url(r'^admin/', include(admin.site.urls)),)
默认的代码是添加管理员权限的东西,我们暂且先不管这些东西,你也可以先注释掉这些内容。我们在其中添加这样两句代码:
from DjangoE_1.view import hello
(r'^hello/$',hello),
于是我们的代码变成了这个样子
from django.conf.urls import patterns, include, urlfrom django.contrib import adminadmin.autodiscover()from DjangoE_1.view import hellourlpatterns = patterns('', # Examples: # url(r'^$', 'DjangoE_1.views.home', name='home'), # url(r'^blog/', include('blog.urls')), url(r'^admin/', include(admin.site.urls)), (r'^hello/$',hello),)
需要注意的是erlpatterns是一个元组类型的数据,因此我们在末尾最好添加一个逗号,刷新一下服务器,重新登录一下
于是我们在我们的页面中看到了输出了
Hello world
熟悉Web的应该已经明白基本上的操作流程了,下面是一个稍微复杂一点的操作!
假如我们希望显示一个动态的内容,那我们该怎么办呢?也就是我们怎样想view.py的视图文件中传入参数?
#view.pydef hello(request): return HttpResponse("hello");def showTime(request): now = datetime.datetime.now() html = """It is now %s.""" % now return HttpResponse(html)def showCurrentTime(request): now = datetime.datetime.now(); html=""" """ %now; return HttpResponse(html)
#urls.pyfrom django.conf.urls import patterns, include, urlfrom django.contrib import adminadmin.autodiscover()import DjangoE_1.viewurlpatterns = patterns('', # Examples: # url(r'^$', 'DjangoE_1.views.home', name='home'), # url(r'^blog/', include('blog.urls')), url(r'^admin/', include(admin.site.urls)), (r'^hello/$',DjangoE_1.view.hello), (r'^show/$', DjangoE_1.view.showTime), (r'^getnow/$', DjangoE_1.view.showCurrentTime),)
可以发现,我们完全可以以字符串的形式传递数据。但是要求有严格的数据格式,因为在Python里面如果空格没有的话有时候都会报错。这里只是练习,实际开发中是不会有这样的代码的。另外,注意getnow是不会动态显示时间的,因为我们的now只是在连接的时候获取一次,因此它的值实际是不会变化的。下一节我们将应用模板来进行代码分离,目的是将Python和HTML的代码能区别开来。