Django学习笔记之——Urls

简介:
UrlConf模块感觉就像是“路由”,它分析请求的路径,并请求派送给匹配的view去处理

打开mysite.urls.py文件,如下:
_____________________________________________________
from django.conf.urls import patterns, include, url

from views import home 
import blog.urls

urlpatterns = patterns('',
    url(r'^$', home),
    url(r'^blog/', include(blog.urls))
)
-----------------------------------------------------
这里url()函数中的第一个参数则是路径的匹配正则式,第二个参数是对应的view。
注意:home与blog.urls必须是提前import了的。不然解析器不知道home与blog.urls
是什么,就会报错。

由于Python没有强制类型,而且在运行时可以识别变量的类型,所以url()与include()
设计得很灵活。它们还可以支持名称:
_____________________________________________________
from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^$', 'mysite.views.home'),
    url(r'^blog/', include('mysite.blog.urls'))
)
-----------------------------------------------------
这里用的是'mysite.views.home',注意是加了引号的,是字符串。
它的实现原理就是暂时记录名称,等manage.py运行起来之后再根据名称去动态import
对应的对象。
注意:名称必须是相对于manage.py的。'views.home', 'home'都是不正确的。

匹配参数
~~~~~~~~
在url()中还可以从路径上捕获组,并以参数的形式传给view函数。

urls.py :
___________________________________________________________________
urlpatterns = patterns('',
    url(r'^date/(\d{4})-(\d{1,2})-(\d{1,2})', 'mysite.views.date'),

-------------------------------------------------------------------
用正则式的组捕获功能,将年月日分别捕获出来。

views.py :
___________________________
def date(request, *args):
    print(args)
    return HttpResponse()
---------------------------
让view函数date接受一个可变参数args,然后将其打印出来。

请求127.0.0.1:8000/date/2015-12-24
运行时打印的结果:
(u'2014', u'12', u'24')

为了可读性更好,我们可以将正则式这样写:
_______________________________________________________________________
    url(r'^date/(?P<year>\d{4})-(?P<month>\d{1,2})-(?P<day>\d{1,2})',
        'mysite.views.date'),
-----------------------------------------------------------------------
为每个组用(?P<name>xxxx)的方式命名。

而view这样改一下:
_____________________________________
def date(request, year, month, day):
    print('year:' + year)
    print('month:' + month)
    print('day:' + day)
    return HttpResponse()
-------------------------------------
添加yeas, month, day三个参数。而这三个参数与正则式的组名一一对应(在顺序上
无需对应)。

再次访问:127.0.0.1:8000/date/2015-12-24
输出结果:
year:2014
month:12
day:24

不仅如此,url()函数还有第三个参数,允许我们为view函数添加其它附加参数。

在urls.py添加url:
___________________________________________________________________________
urlpatterns = patterns('',
    url(r'^extra$', 'mysite.views.extra_param', {'abc':120, 'xyz':'Hello'})
    #                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^
)
---------------------------------------------------------------------------
在views.py中添加extra_param函数:
_____________________________________
def extra_param(request, xyz, abc):
    print(xyz)
    print(abc)
    return HttpResponse()
-------------------------------------
访问 http://127.0.0.1:8000/extra
服务控制端打印结果:
Hello
120

综上,我们可以非常灵活地使用url()进行访问地址匹配。

==========================================================================
关于urls.py中引用到的patterns(), url(), include()三个函数在:
django/conf/urls/__init__.py中定义。

include(arg, namespace=None, app_name=None)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include(arg)函数检查${arg}模块中是否包含urlpatterns属性。
并返回: (urlconf_module, app_name, namespace)

url(regex, view, kwargs=None, name=None, prefix='')
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
返回一个RegexURLPattern对象。

patterns(prefix, *args)
~~~~~~~~~~~~~~~~~~~~~~~
返回一个RegexURLPattern对象列表,并使列表中的每个成员的prefix都与函数的
prefix一致。
目录
相关文章
|
6月前
|
Python
基于Django的Python应用—学习笔记—功能完善
基于Django的Python应用—学习笔记—功能完善
|
6月前
|
存储 数据库 数据安全/隐私保护
基于Django的Python应用——学习笔记
基于Django的Python应用——学习笔记
|
安全 中间件 开发者
【Django学习笔记 - 9】:装饰器在类视图中的使用、中间件(开发中间件)、知识点小补充(子应用的集中管理)
【Django学习笔记 - 9】:装饰器在类视图中的使用、中间件(开发中间件)、知识点小补充(子应用的集中管理)
388 5
【Django学习笔记 - 9】:装饰器在类视图中的使用、中间件(开发中间件)、知识点小补充(子应用的集中管理)
|
数据库 数据安全/隐私保护 Python
【Django学习笔记 - 19】:认证、自定义认证、权限、限流
【Django学习笔记 - 19】:认证、自定义认证、权限、限流
282 0
【Django学习笔记 - 19】:认证、自定义认证、权限、限流
|
缓存 前端开发 数据库
【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由2
【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由
166 0
【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由2
|
XML JSON 前端开发
【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由
【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由
210 0
【Django学习笔记 - 18】:drf请求响应简介、基类(APIView、GenericAPIView)、mixin扩展类与三级视图、视图集与路由
|
XML JSON 前端开发
【Django学习笔记 - 17】:序列化和反序列化(restful接口小案例、DRF的工程搭建、序列化器与序列化、验证、保存)
【Django学习笔记 - 17】:序列化和反序列化(restful接口小案例、DRF的工程搭建、序列化器与序列化、验证、保存)
530 0
【Django学习笔记 - 17】:序列化和反序列化(restful接口小案例、DRF的工程搭建、序列化器与序列化、验证、保存)
|
JSON 前端开发 JavaScript
【Django学习笔记 - 16】:DRF概述、Web应用模式(前后端分离简介)
【Django学习笔记 - 16】:DRF概述、Web应用模式(前后端分离简介)
299 0
【Django学习笔记 - 16】:DRF概述、Web应用模式(前后端分离简介)
|
Python
【Django学习笔记 - 15】:admin站点编辑(关联对象在列表页中添加,编辑页调整、图片设置)2
【Django学习笔记 - 15】:admin站点编辑(关联对象在列表页中添加,编辑页调整、图片设置)
101 0
【Django学习笔记 - 15】:admin站点编辑(关联对象在列表页中添加,编辑页调整、图片设置)2