Django开发实战之URLconf详解

什么是URLconf?

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

上篇文章(Django实战:构建一个blog)中我们新建了一个工程mysite,mysite/mysite/urls.py这个文件(自动创建的)就对应URLconf,我们查看一下这个文件,如下图所示:

这个文件必须暴露出一个urlpatterns对象,由patterns函数(或方法)返回。该函数由以下两点组成:

1.一个打头的前缀字符串(此处为空)

2.一个或多个由正则表达式字符串匹配一个或一组URL组成的Python元组。(此处是url函数)

Python正则表达式

正则表达式 (或 regexes ) 是通用的文本模式匹配的方法。 下面是一些基本的但常用的语法:

注意点1:

^表示要求表达式对字符串的头部进行匹配,$表示要求表达式对字符串的尾部进行匹配。

注意点2:

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

例子:

r’^′:匹配的是网站的根URL,′/′(在Django项目里经常用这个来定义首页)r′hello/′:任何以/hello/开头的URL将会匹配,如/hello/jack,/hello/bruce等r′hello/’:任何以/hello/结尾的URL将会匹配,如/jack/hello/,/bruce/hello/等

r’hello/’:任何包含hello/的URL将会匹配

用url函数替换元组

较老版本的Django里面用的是元组,eg:

from django.conf.urls.defaults import *
from mysite.views import hello

urlpatterns = patterns(‘‘,
    (‘^hello/$‘, hello),
)

此处patterns函数的第二个参数是一个元组,而新版本的Django将元组替换成了url函数。url函数接收三个参数:一个正则表达式、一个视图字符串/函数以及一个可选的参数name,name必须保持唯一。eg:

```
from django.conf.urls.defaults import *

urlpatterns = patterns(‘‘,
    url(‘^hello/$‘, ‘blog.views.hello‘, name=‘hello‘),
)

“`

注意这里url的第二个参数,该参数’blog.views.hello’是一个字符串,指向一个具体的函数(或方法),此处代表工程的根目录下一个blog目录,在blog目录下有个views.py这个文件,在views.py中定义了一个hello函数。比如说工程名叫mysite,那么views.py的路径是mysite/blog/views.py。

这里总结一下从在浏览器中输入http://ip:port/hello/到浏览器显示相应的信息的整个过程。

1.Django查找配置文件mysite/mysite/settings.py,查看ROOT_URLCONF为多少,如图所示:

这里为’mysite.urls’,表示URLconf为mysite/urls.py这个文件。

2.查看mysite/urls.py,匹配正则表达式,看哪项能匹配hello/

3.若匹配不成功,则返回http 404信息

4.若匹配成功,如url(‘^hello/$’, ‘blog.views.hello’, name=’hello’)就调用blog/views.py里的hello方法,该方法接收HttpRequest参数,返回HttpResponse对象。

具体的views.py我们以后再讲。

Django开发实战视频教程:http://www.duobei.com/course/3812028831

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-08 18:03:28

Django开发实战之URLconf详解的相关文章

Django之HttpServer服务器分析详解

大家知道,软件的正向工程,是从软件的需求获取开始,大概经历需求分析,概要分析,领域分析,设计分析,详细设计,代码实现,部署,实施这几个步骤,最终交付给用户使用.而在某些时候,比如某个软件产品是用PHP开发的,因为某些原因,我们想移植到JAVA平台去.或者某公司看到某个软件的市场前景很好,想COPY它的主要功能,然后经过加工润色后推出一个具有相同功能,更好用户体验或更多功能的软件.或者单纯的以研究软件的结构.设计思想为目的.基于这些需求,我们需要逆向工程.正向工程是一个从过程导出结果的步骤,而逆向

【java项目实战】Servlet详解以及Servlet编写登陆页面(二)

Servlet是Sun公司提供的一门用于开发动态web网页的技术.Sun公司在API中提供了一个servlet接口,我们如果想使用java程序开发一个动态的web网页,只需要实现servelet接口,并把类部署到web服务器上就可以运行了. 到底什么是Servlet呢? 通俗一点,只要是实现了servlet接口的java程序,均称Servlet.Servlet是由sun公司命名的,Servlet = Server + Applet(Applet表示小应用程序),Servlet是在服务器端运行的小

Cocos2d-x手机游戏开发与项目实践详解_随书代码

Cocos2d-x手机游戏开发与项目实战详解_随书代码 作者:沈大海  由于原作者共享的资源为UTF-8字符编码,下载后解压在win下显示乱码或还出现文件不全问题,现完整整理,解决所有乱码问题,供大家下载. 下载地址:http://download.csdn.net/detail/oyangyufu/7665049 Cocos2d-x手机游戏开发与项目实践详解_随书代码

SVN与TortoiseSVN实战:补丁详解

硬广:<SVN与TortoiseSVN实战>系列已经写了五篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:TortoiseSVN新建及合并分支>重点介绍了标签和分支的概念及实际操作演示,关注人数较多,三.四篇<SVN与TortoiseSVN实战:冲突详解(二)>详解了SVN如何判定冲突及冲突文件说明和解决冲突方法. 本篇详细SVN中补丁的概念,版本控制之道这本书对于SVN的讲解比较全面了,但书中也没有

Android开发之通知栏Notification详解

Notification的用法  --- 状态栏通知 发送一个状态栏通知必须的两个类: 1. NotificationManager   --- 状态栏通知的管理类,负责发通知,清除通知等 NotificationManager : 是一个系统Service,必须通过 context.getSystemService(NOTIFICATION_SERVICE)方法获取 NotificationManager notificationManager = (NotificationManager)

iOS开发摇动手势实现详解

1.当设备摇动时,系统会算出加速计的值,并告知是否发生了摇动手势.系统只会运动开始和结束时通知你,并不会在运动发生的整个过程中始终向你报告每一次运动.例如,你快速摇动设备三次,那只会收到一个摇动事件. 2,想要实现摇动手势,首先需要使视图控制器成为第一响应者,注意不是单独的控件.成为第一响应者最恰当的时机是在视图出现的时候,而在视图消失的时候释放第一响应者. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -(BOOL)canBecomeFirstRespond

iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

这里接着前文<iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)>,主要是干货环节,列举了如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 三. 常用方法的封装 虽然 PhotoKit 的功能强大很多,但基于兼容 iOS 8.0 以下版本的考虑,暂时可能仍无法抛弃 ALAssetLibrary,这时候一个比较好的方案是基于 ALAssetLibrary 和 PhotoKit 封装出一系列模拟系统 Asset 类的自定义类,然后在其中封装好兼容 A

iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

一. 概况 本文接着 iOS 开发之照片框架详解,侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 这里引用一下前文中对 PhotoKit 基本构成的介绍: PHAsset: 代表照片库中的一个资源,跟 ALAsset 类似,通过 PHAsset 可以获取和保存资源 PHFetchOptions: 获取资源时的参数,可以传 nil,即使用系统默认值 PHAssetCo

Node.js开发入门—Stream用法详解

Stream是Node.js中非常重要的一个模块,应用广泛.一个流是一个具备了可读.可写或既可读又可写能力的接口,通过这些接口,我们可以和磁盘文件.套接字.HTTP请求来交互,实现数据从一个地方流动到另一个地方的功能. 所有的流都实现了EventEmitter的接口,具备事件能力,通过发射事件来反馈流的状态.比如有错误发生时会发射"error"事件,有数据可被读取时发射"data"事件.这样我们就可以注册监听器来处理某个事件,达到我们的目的. Node.js定义了R