python基础入门之设计URL方案
DjangoURL分发系统使用了正则表达式配置模块,它可以将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中实现视图的配置
8fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('',
(r'^admin/',include('django.contrib.admin.urls.admin')),
(r'^jobs/$','djproject.jobs.views.index'),
(r'^jobs/(?Pd+)/$','djproject.jobs.views.detail'),
)
注意部分,这在后面非常重要。
最佳实践是提取出应用程序特有的URL模式,并将它们放入应用程序自身中。这样可以取消应用程序与项目的耦合限制,从而更好地实现重用。jobs使用的应用程序级的URL配置文件如下所示:
清单22.应用程序级的URL配置文件urls.py
6fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('',
(r'^$','djproject.jobs.views.index'),
(r'^(?Pd+)/$','djproject.jobs.views.detail'),
)
由于view方法现在都是来自同一个模块,因此第一个参数可以使用这个模块的根名称来指定djproject.jobs.views,Django会使用它来查找index方法和detail方法:
清单23.jobs/urls.py:查找index和detail方法
6fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('djproject.jobs.views',
(r'^$','index'),
(r'^(?Pd+)/$','detail'),
)
尝试上面的jobsURL会返回到这个项目中,因为它们是使用include函数将其作为一个整体来实现的。应用程序级的URL被绑定到下面的/jobs部分:
清单24.djproject/urls.py:将URL送回该项目
6fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('',
(r'^admin/',include('django.contrib.admin.urls.admin')),
(r'^jobs/',include('djproject.jobs.urls')),
)
如果现在尝试使用测试服务器来访问索引页,会得到一个错误,因为正在调用的视图(djproject.jobs.views.index)不存在。
以上内容为大家介绍了python基础入门之设计URL方案,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。http://www.mobiletrain.org/
相关推荐HOT
更多>>python流式读取大文件的两种方法
python流式读取大文件的两种方法1、使用read方法分块读取使用更底层的file.read()方法,与直接循环迭代文件对象不同,每次调用file.read(chunk_...详情>>
2023-11-14 16:48:08pythongreenlet如何交替运行
pythongreenlet如何交替运行1、greenlet说明greenlet是一个基于Greenlet实现的网络库,它使用greenlet来实现协同程序。其基本思想是,当greenle...详情>>
2023-11-14 14:52:57python收集参数的调用顺序
python收集参数的调用顺序本文教程操作环境:windows7系统、Python3.9.1,DELLG3电脑。1、说明收集参数,关键字参数,普通参数可以混合使用使用...详情>>
2023-11-14 13:23:09python实例属性的优先级分析
python实例属性的优先级分析1、说明当在实例上给类属性赋值时,实际上是给这个实例绑定了同名的属性而已,并不会影响类属性和其他实例。使用实...详情>>
2023-11-14 10:17:33