您现在所在的位置:首页 > 学习资源 > Python+人工智能入门教材 >

Python基础入门教程71:设计 URL 方案

来源:奇酷学院 发表于:

设计 URL 方案Django URL 分发系统使用了正则表达式配置模块,它可以将 URL 字符串模式映射为 Python 方法views。这个系统允许 UR

设计 URL 方案

Django URL 分发系统使用了正则表达式配置模块,它可以将 URL 字符串模式映射为 Python 方法 views。这个系统允许 URL 与底层代码完全脱节,从而实现最大的控制和灵活性。

urls.py 模块被创建和定义成 URL 配置的默认起点(通过 settings.py 模块中的 ROOT_URLCONF 值)。URL 配置文件的惟一要求是必须包含一个定义模式 urlpatterns 的对象。

这个职位公告板应用程序会在启动时打开一个索引和一个详细视图,它们可以通过以下的 URL 映射进行访问:

  • /jobs 索引视图:显示最近的 10 个职位
  • /jobs/1 详细视图:显示 ID 为 1 的职位信息

这两个视图(索引视图和详细视图)都是在这个 jobs 应用程序的 views.py 模块中实现的。在项目的 urls.py 文件中实现这种配置看起来如下所示:

清单 21. 在 djproject/urls.py 中实现视图的配置
1
2
3
4
5
6
7
8
from django.conf.urls.defaults import *
 
urlpatterns = patterns('',
    (r'^admin/', include('django.contrib.admin.urls.admin')),
 
    (r'^jobs/$', 'djproject.jobs.views.index'),
    (r'^jobs/(?P<job_id>\d+)/$', 'djproject.jobs.views.detail'),
)

注意 <job_id> 部分,这在后面非常重要。

最佳实践是提取出应用程序特有的 URL 模式,并将它们放入应用程序自身中。这样可以取消应用程序与项目的耦合限制,从而更好地实现重用。jobs 使用的应用程序级的 URL 配置文件如下所示:

清单 22. 应用程序级的 URL 配置文件 urls.py
1
2
3
4
5
6
from django.conf.urls.defaults import *
 
urlpatterns = patterns('',
    (r'^$', 'djproject.jobs.views.index'),
    (r'^(?P<job_id>\d+)/$', 'djproject.jobs.views.detail'),
)

由于 view 方法现在都是来自同一个模块,因此第一个参数可以使用这个模块的根名称来指定 djproject.jobs.views,Django 会使用它来查找 index 方法和 detail 方法:

清单 23. jobs/urls.py:查找 index 和 detail 方法
1
2
3
4
5
6
from django.conf.urls.defaults import *
 
urlpatterns = patterns('djproject.jobs.views',
    (r'^$', 'index'),
    (r'^(?P<object_id>\d+)/$', 'detail'),
)

尝试上面的 jobs URL 会返回到这个项目中,因为它们是使用 include 函数将其作为一个整体来实现的。应用程序级的 URL 被绑定到下面的 /jobs 部分:

清单 24. djproject/urls.py:将 URL 送回该项目
1
2
3
4
5
6
from django.conf.urls.defaults import *
 
urlpatterns = patterns('',
    (r'^admin/', include('django.contrib.admin.urls.admin')),
    (r'^jobs/', include('djproject.jobs.urls')),
)

如果现在尝试使用测试服务器来访问索引页(http://localhost:8000/jobs),会得到一个错误,因为正在调用的视图(djproject.jobs.views.index)不存在。