• 第一个Django程序:Hello World

    视图与URL配置
    服务器君一共花费 8.873 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    关于建立 Django 开发环境,可以参照 Python Web运行环境搭建 这篇文章,这里不再累述。

    一个 Django 项目包含的文件

    使用 startproject 命令创建一个目录,会生成以下 4 个文件:

    • __init__.py :让 Python 把该目录当成一个开发包 (即一组模块)所需的文件。 这是一个空文件,一般你不需要修改它。
    • manage.py :一种命令行工具,允许你以多种方式与该 Django 项目进行交互。 键入python manage.py help,看一下它能做什么。 你应当不需要编辑这个文件;在这个目录下生成它纯是为了方便。
    • settings.py :该 Django 项目的设置或配置。 查看并理解这个文件中可用的设置类型及其默认值。
    • urls.py:Django项目的URL设置。 可视其为你的django网站的目录。 目前,它是空的。

    尽管这些的文件很小,但这些文件已经构成了一个可运行的 Django 应用。

    第一个基于 Django 的页面: Hello World

    正如我们的第一个目标,创建一个网页,用来输出这个著名的示例信息:Hello World (或 Hello NowaMagic)

    如果你曾经发布过Hello world页面,但是没有使用网页框架,只是简单的在hello.html文本文件中输入Hello World,然后上传到任意的一个网页服务器上。 注意,在这个过程中,你已经说明了两个关于这个网页的关键信息: 它包括(字符串 "Hello world")和它的URL( http://www.example.com/hello.html , 如果你把文件放在子目录,也可能是 http://www.example.com/files/hello.html)。

    使用Django,你会用不同的方法来说明这两件事 页面的内容是靠view function(视图函数) 来产生,URL定义在 URLconf 中。首先,我们先写一个Hello World视图函数。

    1. 制作视图

    首先我们在 startproject 制作的 mysite 文件夹中,创建一个叫做 views.py 的空文件。也就是在 __init__.py 这些文件的同级目录中。

    这个Python模块将包含这一章的视图。 请留意,Django对于view.py的文件命名没有特别的要求,它不在乎这个文件叫什么。但是根据约定,把它命名成view.py是个好主意,这样有利于其他开发者读懂你的代码。

    from django.http import HttpResponse
    
    def hello(request):
        return HttpResponse("Hello NowaMagic")
    

    OK,就这么简单,视图做好了。

    我们逐行逐句地分析一遍这段代码:

    首先,我们从 django.http 模块导入(import) HttpResponse 类。参阅后面的附录了解更多关于 HttpRequest 和 HttpResponse 的细节。 我们需要导入这些类,因为我们会在后面用到。

    接下来,我们定义一个叫做hello 的视图函数。

    每个视图函数至少要有一个参数,通常被叫作request。 这是一个触发这个视图、包含当前Web请求信息的对象,是类django.http.HttpRequest 的一个实例。在这个示例中,我们虽然不用 request 做任何事情,然而它仍必须是这个视图的第一个参数。

    注意视图函数的名称并不重要;并不一定非得以某种特定的方式命名才能让 Django 识别它。 在这里我们把它命名为:hello,是因为这个名称清晰的显示了视图的用意。同样地,你可以用诸如:hello_wonderful_beautiful_world,这样难看的短句来给它命名。 在下一小节(Your First URLconf),将告诉你Django是如何找到这个函数的。

    这个函数只有简单的一行代码: 它仅仅返回一个HttpResponse对象,这个对象包含了文本“Hello world”。

    这里主要讲的是: 一个视图就是Python的一个函数。这个函数第一个参数的类型是HttpRequest;它返回一个HttpResponse实例。为了使一个Python的函数成为一个Django可识别的视图,它必须满足这两个条件。 (也有例外,但是我们稍后才会接触到。)

    2. 制作 URLconf

    前面我们已经做好了视图,我们还需要通过一个详细描述的 URL 来显式的告诉它并且激活这个视图。为了绑定视图函数和 URL,我们使用 URLconf

    URLconf 就像是 Django 所支撑网站的目录。 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表。 你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码。 例如,当用户访问/foo/时,调用视图函数foo_view(),这个视图函数存在于Python模块文件view.py中。

    startproject 命令会自动为你建了一份 URLconf(即 urls.py 文件)。 默认的urls.py会像下面这个样子:

    from django.conf.urls import patterns, include, url
    
    # Uncomment the next two lines to enable the admin:
    # from django.contrib import admin
    # admin.autodiscover()
    
    urlpatterns = patterns('',
        # Examples:
        # url(r'^$', 'PythonProject.views.home', name='home'),
        # url(r'^PythonProject/', include('PythonProject.foo.urls')),
    
        # Uncomment the admin/doc line below to enable admin documentation:
        # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    
        # Uncomment the next line to enable the admin:
        # url(r'^admin/', include(admin.site.urls)),
    )
    

    我们接下来做一些修改,让它识别对 http://127.0.0.1:8000/hello/ 这个 URL 的识别。很简单,加上这么一句即可:

    ('^hello/$', hello),
    

    现在访问 http://127.0.0.1:8000/hello/ ,OK,成功:

    Hello NowaMagic
    

    默认的URLconf包含了一些被注释起来的Django中常用的功能,仅仅只需去掉这些注释就可以开启这些功能。下面是URLconf中忽略被注释的行后的实际内容:

    from django.conf.urls.defaults import *
    
    urlpatterns = patterns('',
    )
    

    让我们逐行解释一下代码:

    • 第一行导入django.conf.urls.defaults下的所有模块,它们是Django URLconf的基本构造。 这包含了一个patterns函数。
    • 第二行调用 patterns() 函数并将返回结果保存到 urlpatterns 变量。patterns函数当前只有一个参数—一个空的字符串。 (这个字符串可以被用来表示一个视图函数的通用前缀。具体我们将在后面介绍。)

    当前应该注意是 urlpatterns 变量, Django 期望能从 ROOT_URLCONF 模块中找到它。 该变量定义了 URL 以及用于处理这些 URL 的代码之间的映射关系。 默认情况下,URLconf 所有内容都被注释起来了——Django 应用程序还是白版一块。

    简单来说,我们只是告诉 Django,所有指向 URL /hello/ 的请求都应由 hello 这个视图函数来处理。

    到这里,我们已经创建了第一个Django的web页面。任务完成。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [移动开发] Android布局基本知识 3 个条目
  2. [移动开发] Android加载器Loaders 5 个条目
  3. [软件工程与项目管理] 呈现树的构建 13 个条目
  4. [Python程序设计] Django 入门知识浅介 10 个条目
  5. [移动开发] Android View注入框架Butter Knife 3 个条目
  6. [PHP程序设计] 声明式编程范式 12 个条目
  7. [智力开发与知识管理] 整体性学习步骤 9 个条目
  8. [Python程序设计] 标准库:urllib/urllib2 14 个条目
  9. [PHP程序设计] Nginx基本操作释疑 7 个条目
  10. [Linux操作系统] CentOS上使用EPEL Repository 2 个条目
  11. [智力开发与知识管理] 信息的类型与结构 9 个条目
  12. [移动开发] Android Studio里的Gradle 3 个条目
窗口 -- [协会]