您的位置:首页 > 编程语言 > Python开发

第三章 动态网页基础

2013-05-29 22:59 232 查看
第三章 动态网页基础
1、第一份视图:动态内容
1)视图函数
一个接受 Web 请求并返回 Web 响应的 Python 函数
响应可以是一份网页的 HTML 内容、一次重定向、一条 404 错误、一份 XML 文档、一幅图片,或其它任何东西
该段代码可以随意放置
2)例子views.py
from django.http import HttpResponse     #从 django.http模块导入 HttpResponse类
import datetime     #从 Python 标准库(Python 自带的实用模块集合)中导入datetime模块
def current_datetime(request):     #current_datetime函数,每个视图函数都以一个 HttpRequest对象为第一个参数,该参数通常命名为 request
now = datetime.datetime.now()      #计算当前日期和时间,并以 datetime.datetime对象的形式保存为局部变量 now
html = "<html><body>It is now %s.</body></html>" % now      #%s是占位符,字符串之后的百分号表示使用变量 now的值替换 %s
return HttpResponse(html)     #返回一个包含所生成响应的 HttpResponse对象。每个视图函数都负责返回一个 HttpResponse对象


2、将 URL 映射到视图

1)URLconf就像是 Django 所支撑网站的目录
本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表

必须位于python搜索路径!
2)python搜索路径
启动 Python 交互式解释程序,输入 import sys,接着输入 print sys.path
对于所有路径,按照顺序查找(注:Python 路径第一项的空字符串表示当前目录)
3)current_datetime视图
from django.conf.urls.defaults import *      #从 django.conf.urls.defaults模块引入了所有的对象,其中包括了叫做 patterns的函数
from mysite.views import current_datetime      #从模块 (在 Python 的 import 语法中, mysite/views.py转译为 mysite.views) 中引入了 current_datetime视图
urlpatterns = patterns('',
(r'^time/$', current_datetime),      #URLpattern, Python 元组,其第一个元素是简单的正则表达式,第二个元素是为该模式应用的视图函数
)

①urlpatterns变量定义了 URL 以及用于处理这些 URL 的代码之间的映射关系
②current_datetime视图函数作为对象传递,而不是调用它。函数是一级对象,可以向变量一样传递
③r'^time/$'中的 r表示 '^time/$'是一个原始字符串,避免正则表达式有过多的转义字符
④^和 $符号非常重要。上箭头要求表达式对字符串的头部进行匹配,美元符号则要求表达式对字符串的尾部进行匹配。来精确匹配 URL /time/
4)正则表达式



3、Django是怎么处理请求的

1)运行Django开发服务器和构造Web页面请求
①命令 python manage.py runserver从同一目录载入文件 settings.py(特定的Django实例所有的各种可选配置)
②ROOT_URLCONF告诉Django哪个Python模块应该用作本网站的 URLconf。 系统自动生成的 settings.py里 ROOT_URLCONF默认设置是 urls.py 
③当访问 URL /time/时,Django 根据 ROOT_URLCONF的设置装载 URLconf 。然后按顺序逐个匹配URLconf里的URLpatterns,直到找到一个匹配的
④当找到这个匹配的URLpatterns就调用相关联的view函数,并把 HttpRequest对象作为第一个参数

2)URL配置和松耦合
决定URL返回哪个视图函数和实现这个视图函数是在两个不同的地方
3)404 错误
调试模式下,部署到因特网需要关闭调试模式

4、第二个视图:动态URL
1)带通配符的URL匹配模式
from django.conf.urls.defaults import *
from mysite.views import current_datetime, hours_ahead
urlpatterns = patterns('',
(r'^time/$', current_datetime),
(r'^time/plus/(\d{1,2})/$', hours_ahead),
)

(\d{1,2})表示只允许一个或两个数,使用圆括号把参数在URL模式里标识出来
2)hours_ahead视图
views.py修改如下: 
def hours_ahead(request, offset):      #HttpRequest对象总是作为它的第一个参数,offset是从匹配的URL里提取出来的,总是字符串!第二个!
offset = int(offset)     # 字符串值转换为整数
dt = datetime.datetime.now() + datetime.timedelta(hours=offset)     # datetime.timedelta函数的参数 hours必须是整数类型
html = "<html><body>In %s hour(s), it will be %s.</body></html>" % (offset, dt)      #两个 %s符号和一个以进行插入的值的元组: (offset, dt)
return HttpResponse(html)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python URL HTML