根据HTTP请求中的URL,查找路由表,将HTTP请求分发到 不同的视图去处理:
1、单一路由对应
1 url(r'^index$', views.index),
2、基于正则的路由
url(r'^index/(\d*)', views.index),
url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage),
3、添加额外的参数,默认的参数
url(r'^manage/(?P<name>\w*)', views.manage,{'id':333}),
4、为路由映射设置名称
url(r'^home', views.home, name='h1'),
url(r'^index/(\d*)', views.index, name='h2'),
5、根据app对路由规则进行分类
可以创建多个路由,分发到其他路由使用include()
url(r'^web/',include('web.urls')),
动态url:
urlpatterns = [
url(r'^admin/', admin.site.urls),
#url----function
'''
url(r'^index/',index ),
url(r'^Login/',login ),
#配置动态的URL,因为此时不确定我会产生多少条url,此时在函数中需要加上一个捕获的参数,id,用来捕获用户的id
#尖括号里面的值需要与业务逻辑层次上对应,模板格式
url(r'^list/(?P<name>\d*)/(?P<id>\d*)/',list ),
#设置默认值
url(r'^list/(?P<name>\d*)/',list ,{'id':222}),
'''
]
分类的url:
urlpatterns = [
url(r'^admin/', admin.site.urls),
#url----file
#file-----url>function 类似于路径映射,本来是单纯的由jango里面的urls(全局的url)统一的配置路由信息,但是如果我的app多了之后这就会显得有点乱,所以此时可以指定URL路径,由各自的APP去执行url,每个路径多加了一个分类的路径
url(r'^ad/', include('ad.urls')),
url(r'^web/',include('web.urls')),
]
6、通过反射机制,为django开发一套动态的路由系统
在urls.py里定义分类正则表达式
from django.conf.urls import patterns, include, url
from django.contrib import admin
from DynamicRouter.activator import process
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'DynamicRouter.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
('^(?P<app>(\w+))/(?P<function>(\w+))/(?P<page>(\d+))/(?P<id>(\d+))/$',process),
('^(?P<app>(\w+))/(?P<function>(\w+))/(?P<id>(\d+))/$',process),
('^(?P<app>(\w+))/(?P<function>(\w+))/$',process),
('^(?P<app>(\w+))/$',process,{'function':'index'}),
)
在同目录下创建activater.py
#!/usr/bin/env python
#coding:utf-8
from django.shortcuts import render_to_response,HttpResponse,redirect
def process(request,**kwargs):
'''接收所有匹配url的请求,根据请求url中的参数,通过反射动态指定view中的方法'''
app = kwargs.get('app',None)
function = kwargs.get('function',None)
try:
appObj = __import__("%s.views" %app)
viewObj = getattr(appObj, 'views')
funcObj = getattr(viewObj, function)
#执行view.py中的函数,并获取其返回值
result = funcObj(request,kwargs)
except (ImportError,AttributeError),e:
#导入失败时,自定义404错误
return HttpResponse('404 Not Found')
except Exception,e:
#代码执行异常时,自动跳转到指定页面
return redirect('/app01/index/')
return result