Django学习笔记之【Django初识】 .

1.  第一份视图: 在mysite文件夹中,创建一个叫做views.py的空文件。这个Python模块将包含这一章的视图。  我们的Hello world视图非常简单。 这些是完整的函数和导入声明,你需要输入到views.py文件: 


from django.http import HttpResponse 

def hello(request): 

    return HttpResponse("Hello world") 


每个视图函数至少要有一个参数,通常被叫作request。这是一个触发这个视图、包含当前Web请求信息的对象,是类django.http.HttpRequest的一个实例,它必须是这个视图的第一个参数。

一个视图就是Python的一个函数。。这个函数第一个参数的类型是HttpRequest;它返回一个HttpResponse实例。


2.  你的第一个URLconf

2.1  URLconf (即 urls.py 文件)就像是 Django 所支撑网站的目录。 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表。 你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码。


from django.conf.urls.defaults import *

urlpatterns = patterns('',

)    #patterns函数当前只有一个参数—一个空的字符串。 (这个字符串可以被用来表示一个视图函数的通用前缀。具体我们将在第八章里面介绍。)


如果想在URLconf中加入URL和view,只需增加映射URL模式和view功能的Python tuple即可. 这里演示如何添加view中hello功能.


from django.conf.urls.defaults import *

from mysite.views import hello

urlpatterns = patterns('',

    ('^hello/$', hello),

)    # (‘^hello/$’, hello), 这行被称作URLpattern,它是一个Python的元组。元组中第一个元素是模式匹配字符串(正则表达式);第二个元素是那个模式将使用的视图函数。简单来说,我们只是告诉 Django,所有指向 URL /hello/ 的请求都应由 hello 这个视图函数来处理。

2.2  讨论一下URLpattern的语法:

    Django在检查URL模式前,移除每一个申请的URL开头的斜杠(/)。

    模式包含了一个尖号(^)和一个美元符号($)。你大多数的URL模式会以^开始、以$结束,但是拥有复杂匹配的灵活性会更好。

    默认地,任何不匹配或尾部没有斜杠(/)的申请URL,将被重定向至尾部包含斜杠的相同字眼的URL。 (这是受配置文件setting中APPEND_SLASH项控制的)

    如果你是喜欢所有URL都以’/’结尾的人(Django开发者的偏爱),那么你只需要在每个URL后添加斜杠,并且设置”APPEND_SLASH”为”True”。

    我们把hello视图函数作为一个对象传递,而不是调用它。 这是 Python (及其它动态语言的) 的一个重要特性: 函数是一级对象(first-class objects), 也就是说你可以像传递其它变量一样传递它们。

现在启动Django开发服务器来测试修改好的URLconf,运行 python manage.py runserver 。打开浏览器访问 " http://12.0.0.1:8000/hello/ ",将看到页面上输出的 Hello world 。

3.  正则表达式。

Django URLconfs 允许你 使用任意的正则表达式来做强有力的URL映射,不过通常你实际上可能只需要使用很少的一 部分功能。

符号       匹配

. (dot)    任意单一字符

\d          任意一位数字

[A-Z]      A 到 Z中任意一个字符(大写)

[a-z]       a 到 z中任意一个字符(小写)

[A-Za-z ] a 到 z中任意一个字符(不区分大小写)

+           匹配一个或更多 (例如, \d+ 匹配一个或 多个数字字符)

[^/]+     一个或多个不为‘/’的字符

?           零个或一个之前的表达式(例如:\d? 匹配零个或一个数字)

*           匹配0个或更多 (例如, \d* 匹配0个 或更多数字字符)

{1,3}    介于一个和三个(包含)之前的表达式(例如,\d{1,3}匹配一个或两个或三个数字) 


4.  Django是如何处理请求的

4.1  所有均开始于 setting 文件。当你运行 python manage.py runserver ,脚本将在于 manage.py 同一个目录下查找名为 setting.py 的文件。这个文件包含了所有有关这个Django项目的配置信息,均大写: TEMPLATE_DIRS , DATABASE_NAME , 等. 最重要的设置时ROOT_URLCONF,它将作为 URLconf 告诉 Django 在这个站点中那些Python的模块将被用到。还记得什么时候django-admin.py startproject创建文件settings.py和urls.py吗?自动创建的 settings.py 包含一个 ROOT_URLCONF 配置用来指向自动产生的 urls.py 。打开文件 settings.py 你将看到如下:  ROOT_URLCONF = 'mysite.urls'  ,相对应的文件是 mysite/urls.py 。当访问 URL /hello/ 时,Django 根据 ROOT_URLCONF 的设置装载 URLconf 。 然后按顺序逐个匹配URLconf里的URLpatterns,直到找到一个匹配的。 当找到这个匹配 的URLpatterns就调用相关联的view函数,并把 HttpRequest 对象作为第一个参数。正如我们在第一个视图例子里面看到的,一个视图功能必须返回一个HttpResponse。 一旦做完,Django将完成剩余的转换Python的对象到一个合适的带有HTTP头和body的Web Response。

总结一下:

    进来的请求转入/hello/.

    Django通过在ROOT_URLCONF配置来决定根URLconf.

    Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。

    如果找到匹配,将调用相应的视图函数

    视图函数返回一个HttpResponse

    Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来

你现在知道了怎么做一个 Django-powered 页面了,真的很简单,只需要写视图函数并用 URLconfs把它们和URLs对应起来。 


5.  第二个视图:动态内容

这个视图需要做两件事情: 计算当前日期和时间,并返回包含这些值的HttpResponse 。

将如下代码放入视图函数:

from django.http import HttpResponse

import datetime

def current_datetime(request):

    now = datetime.datetime.now()

    html = "It is now %s." % now

    return HttpResponse(html)

    函数的第二行代码用 Python 的格式化字符串(format-string)功能构造了一段 HTML 响应。

在urls.py中添加URL模式,以告诉Django由哪一个URL来处理这个视图。

from django.conf.urls.defaults import *

from mysite.views import hello, current_datetime

urlpatterns = patterns('',

    ('^hello/$', hello),

    ('^time/$', current_datetime),

)

完成后即可启动服务器( python manage.py runserver ),在浏览器输入 http://127.0.0.1:8000/time/ 。


6.  URL配置和松耦合

简单的说,松耦合是一个 重要的保证互换性的软件开发方法。

Django的URL配置就是一个很好的例子。 在Django的应用程序中,URL的定义和视图函数之间是松 耦合的,换句话说,决定URL返回哪个视图函数和实现这个视图函数是在两个不同的地方。 这使得 开发人员可以修改一块而不会影响另一块。

例如,考虑一下current_datetime视图。 如果我们想把它的URL 从原来的 /time/ 改变到 /currenttime/ ,我们只需要快速的修改一下URL配置即可, 不用担心这个函数的内部实现。 同样的,如果我们想要修改这个函数的内部实现也不用担心会影响 到对应的URL。

此外,如果我们想要输出这个函数到 一些 URL, 我们只需要修改URL配置而不用 去改动视图的代码。

转自:http://oyzway-pydev.diandian.com/post/2011-03-01/156440

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值