URLconf
- 浏览者通过在浏览器的地址栏中输入网址请求网站
- 对于Django开发的网站,由哪一个视图进行处理请求,是由url匹配找到的
配置URLconf
-
1.
settings.py
中-
指定url配置
ROOT_URLCONF = '项目.urls'
-
-
2.项目中
urls.py
-
匹配成功后,包含到应用的
urls.py
url(正则, include('应用.urls'))
-
-
3.应用中
urls.py
-
匹配成功后,调用
views.py
对应的函数url(正则, views.函数名)
-
-
4.提示
1. 正则部分推荐使用 r,表示字符串不转义,这样在正则 表达式中使用 \ 只写一个就可以 2. 不能在开始加反斜杠,推荐在结束加反斜杠 正确:path/ 正确:path 错误:/path 错误:/path/ 3. 请求的url被看做是一个普通的python字符串,进行匹配时不包括域名、get或post参数 3.1 如请求地址如下: http://127.0.0.1:8000/18/?a=10 3.2 去掉域名和参数部分后,只剩下如下部分与正则匹配 18/
说明:
虽然路由结尾带/能带来上述好处,但是却违背了HTTP中URL表示资源位置路径的设计理念。
是否结尾带/以所属公司定义风格为准。
路由命名与reverse反解析(逆向)
1 路由命名
在定义路由的时候,可以为路由命名,方便查找特定视图的具体路径信息。
1) 在使用include函数定义路由时,可以使用namespace参数定义路由的命名空间,如
url(r'^',include('book.urls',namespace='book'))
命名空间表示,凡是book.urls中定义的路由,均属于namespace指明的book名下。
命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开。
2) 在定义普通路由时,可以使用name参数指明路由的名字,如
urlpatterns = [
url(r'^$',index),
# 匹配书籍列表信息的URL,调用对应的bookList视图
url(r'^booklist/$',bookList,name='index'),
url(r'^testproject/$',views.testproject,name='test'),
]
2 reverse反解析
使用reverse函数,可以根据路由名称,返回具体的路径,如:
from django.core.urlresolvers import reverse
#或者
from django.urls import reverse
def testproject(request):
return HttpResponse("OK")
# 定义视图:提供书籍列表信息
def bookList(request):
url = reverse('book:test')
print(url)
return HttpResponse('index')
- 对于未指明namespace的,reverse(路由name)
- 对于指明namespace的,reverse(命名空间namespace:路由name)