在上一章使用django-admin.py startproject tests制做的项目中的tests文件夹里,建立一个views.py文件.python
1.在views文件中编写以下代码正则表达式
from django.http import HttpResponse def hello(request): return HttpResponse('Hello World')
上面这段代码仅仅返回一个HttpResponse对象,而这个对象之包含文本“Hello World”.django
一个视图就是Python的一个函数。这个函数第一个参数的类型是HttpRequest;它返回一个HttpResponse实例。为了使一个Python的函数成为一个Django可识别的视图,它必须知足这两个条件。浏览器
2.打开urls.py文件,在原来的基础上添加函数
from django.conf.urls import url from django.contrib import admin from tests.views import hello urlpatterns=[ url(r'^admin/', admin.site.urls), url(r'^hello/$',hello), ]
以下url
首先,咱们从模块 (在 Python 的 import 语法中, tests/views.py 转译为 tests.views ) 中引入了 hello视图。code
接下来,咱们为urlpatterns加上一行: (‘^hello/$’, hello), 这行被称做URLpattern,它是一个Python的元组。元组中第一个元素是模式匹配字符串(正则表达式);第二个元素是那个模式将使用的视图函数。server
Django在检查URL模式前,移除每个申请的URL开头的斜杠(/)。 这意味着咱们为/hello/写URL模式不用包含斜杠(/)。模式包含了一个尖号(^)和一个美圆符号($)。这些都是正则表达式符号,而且有特定的含义: 上箭头要求表达式对字符串的头部进行匹配,美圆符号则要求表达式对字符串的尾部进行匹配。对象
最好仍是用范例来讲明一下这个概念。 若是咱们用尾部不是$的模式’^hello/’,那么任何以/hello/开头的URL将会匹配,例如:/hello/foo 和/hello/bar,而不单单是/hello/。相似地,若是咱们忽略了尖号(^),即’hello/$’,那么任何以hello/结尾的URL将会匹配,例如:/foo/bar/hello/。若是咱们简单使用hello/,即没有^开头和$结尾,那么任何包含hello/的URL将会匹配,如:/foo/hello/bar。所以,咱们使用这两个符号以确保只有/hello/匹配,很少也很多。字符串
你大多数的URL模式会以^开始、以$结束,可是拥有复杂匹配的灵活性会更好。
你可能会问:若是有人申请访问/hello(尾部没有斜杠/)会怎样。 由于咱们的URL模式要求尾部有一个斜杠(/),那个申请URL将不匹配。 然而,默认地,任何不匹配或尾部没有斜杠(/)的申请URL,将被重定向至尾部包含斜杠的相同字眼的URL。
3.运行试试
python manage.py runserver
运行后打开浏览器http://127.0.0.1:8000/
发现找不到页面,为何呢?由于刚刚配置的url是 http://127.0.0.1:8000/hello/
成功了。。。
关于正则表达式:
正则表达式 (或 regexes ) 是通用的文本模式匹配的方法。 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}匹配一个或两个或三个数字)