pycharm+django之小试牛刀

        准备好好学习一下python,就从django开始吧,顺带了解一下网站的开发。今天在windows上安装了python,django,以及酷炫吊的IDE——pycharm,学习资料主要是《the Django Book 2》,hello world的程序就不要详细叙述了,比较简单而且网上有很多例程,主要通过动态内容的实验对django开发具有一个大致的认识。

一、新建工程

        第一个目标是创建一个显示当前日期和时间的网页。打开pycham,新建一个django的工程,避免了命令行下的繁琐命令,命名为time_test,application name命名为show_time。可以看到工程目录如下图所示:



二、视图函数

           所谓的视图函数(或 视图 ),只不过是一个接受 Web 请求并返回 Web 响应的 Python 函数。实际上,该响应可以是一份网页的 HTML 内容、一次重定向、一条 404 错误、一份 XML 文档、一幅图片,或其它任何东西。视图本身包含返回该响应所需的任意逻辑。该段代码可以随意放置,只要在 Python 的路径设置中就可以了。没有其它要求——也可以说是没有任何奇特之处。在pycharm建立工程的时候,已经在应用程序的目录下自动帮我们成生了视图函数的程序views.py。
        打开views.py文件,编写python代码如下:
# coding=utf-8

from django.http import HttpResponse
import datetime

def current_datetime(request):
    # 计算当前日期和时间,并以 datetime.datetime 对象的形式保存为局部变量 now
    now = datetime.datetime.now()

    #构建Html响应,使用now替换占位符%s
    html = "<html><body>It is now %s.</body></html>" % now

    #返回一个包含所生成响应的HttpResponse对象
    return HttpResponse(html)


        每个视图函数都以一个 HttpRequest 对象为第一个参数,该参数通常命名为 request 。

三、URL映射

        统一资源定位符(Uniform Resource Locator,缩写为URL)是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。该视图函数返回了包含当前日期和时间的一段 HTML 页面。但是如何告诉 Django 使用这段代码呢?这就是 URLconfs 粉墨登场的地方了。URLconf 就像是 Django 所支撑网站的目录。它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表。你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码。
        在建立工程的时候也已经自动生成了URLconf,即urls.py,打开文件,编辑如下:
from django.conf.urls import patterns, include, url
from show_time.views import current_datetime

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'time_test.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    (r'^time/$', current_datetime),
    #url(r'^admin/', include(admin.site.urls)),
)


        首先,我们从模块中引入了 current_datetime 视图。接着,我们加入了 (r'^time/$', current_datetime), 这一行。该行就是所谓的 URLpattern ,它是一个 Python 元组,其第一个元素是简单的正则表达式,第二个元素是为该模式应用的视图函数。简单来说,我们只是告诉 Django,所有指向 URL /time/ 的请求都应由 current_datetime 这个视图函数来处理。

四、运行网页

        在pycharm点击运行,在下面的调试窗口中,可以看到如下的信息:

        在浏览器中打开地址:http://127.0.0.1:8000/time/,可以看到网站已经在运行了:

五、松耦合原则

        简单的说,松耦合是一个 重要的保证互换性的软件开发方法。如果两段代码是松耦合的,那么改动其中一段代码不会 影响另一段代码,或者只有很少的一点影响。Django的URL配置就是一个很好的例子。在Django的应用程序中,URL的定义和视图函数之间是松 耦合的,换句话说,决定URL返回哪个视图函数和实现这个视图函数是在两个不同的地方。这使得 开发人员可以修改一块而不会影响另一块。
        比方说,考虑有一个以前写的视图函数,这个函数显示当前日期和时间。如果我们想把它的URL 从原来的 /time/ 改变到 /currenttime/ ,我们只需要快速的修改一下URL配置即可, 不用担心这个函数的内部实现。同样的,如果我们想要修改这个函数的内部实现也不用担心会影响 到对应的URL。此外,如果我们想要输出这个函数到 一些 URL, 我们只需要修改URL配置而不用 去改动视图的代码。

六、动态URL

        在上面的实例中,虽然网页的内容是动态的,但是URL是静态的。在大多数动态web应用程序,URL通常都包含有相关的参数。让我们创建第二个视图来显示当前时间和加上时间偏差量的时间,设计是这样的: /time/plus/1/ 显示当前时间+1个小时的页面 /time/plus/2/ 显示当前时间+2个小时的页面 /time/plus/3/ 显示当前时间+3个小时的页面,以此类推。
       为了让程序更具有通用性,以及让URL更加漂亮,我们需要使用正则表达式来规范我们的URL表达:
from django.conf.urls import patterns, include, url
from show_time.views import current_datetime, hours_ahead

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'time_test.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    (r'^time/$', current_datetime),
    (r'^time/plus/(\d{1,2})/$', hours_ahead),
    #url(r'^admin/', include(admin.site.urls)),
)


        我们把它限制在最大允许99个小时, 这样我们就只允许一个或两个数字,正则表达式的语法就是 \d{1,2} 。现在我们已经设计了一个带通配符的URL,我们需要一个方法把它传递到视图函数里去,这样 我们只用一个视图函数就可以处理所有的时间段了。我们使用圆括号把参数在URL模式里标识 出来。在这个例子中,我们想要把这些数字作为参数,用圆括号把 \d{1,2} 包围起来。
        现在开始写 hours_ahead 视图:
# coding=utf-8

from django.http import HttpResponse
import datetime

def current_datetime(request):
    # 计算当前日期和时间,并以 datetime.datetime 对象的形式保存为局部变量 now
    now = datetime.datetime.now()

    #构建Html响应,使用now替换占位符%s
    html = "<html><body>It is now %s.</body></html>" % now

    #返回一个包含所生成响应的HttpResponse对象
    return HttpResponse(html)

def hours_ahead(request, offset):
    offset = int(offset)
    dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
    html = "<html><body>In %s hour(s), it will be %s.</body></html>" % (offset, dt)
    return HttpResponse(html)


        重新运行,在浏览器中输入 http://127.0.0.1:8000/time/plus/3/:


----------------------------------------------------------------

欢迎大家转载我的文章。

转载请注明:转自古-月

http://blog.csdn.net/hcx25909

欢迎继续关注我的博客




你可能感兴趣的:(pycharm+django之小试牛刀)