1.直接路由
在项目中的urls.py文件中,配置路由时,直接使用路径与app中视图函数结合。
from app1 import views
urlpatterns = [
url(r'^index/',views.index)
]
r’^index/'中的index是自己起的url名称,可以根据需要起名。views.index:是views.py文件下对应功能的函数,index是函数名。
2.动态路由
from app1 import views
urlpatterns = [
url(r'^index/(\w+)/',views.index)
]
(\w+)是正则表达式,可以匹配对应的字符,如果希望在url后不通过?name=xxx的形式向后端传输数据,可以根据正则实现,即动态路由。正则表达式可以根据自己的需要定义多个。如url(r’^urlName/(\w+)/(\d+)/’,views.函数名)。
动态路由中参数的获取,即动态路由中正则表达式匹配的数据的获取,例如:
#app01下views.py中的函数
def test3(request,a1,a2):
print(a1)
print(a2)
return HttpResponse("ok")
#项目中urls文件下的路由配置
from app01 import views
urlpatterns = [
url(r'^test3/(\w+)/(\d+)/', views.test3)
]
这种情况下路由中(\w+)正则表达式所匹配的数据会由a1接受,(\d+)中的数据会由a2接受,对应接受。
还可以指定那个正则表达式对应哪一个形参,只需将路由改为:
url(r'^test3/(?P<a2>\w+)/(?P<a1>\d+)/', views.test3)
就可以为动态路由中正则表达式匹配到的数据指定参数接受
3.伪静态页面
可以将路由设计为"xxxx.html"这种形式的url,但并不是真的静态页面的url:
url(r'urlName/正则表达式.html$',views.test6)
注意: 是 正 则 中 的 有 终 止 的 意 思 , 即 为 匹 配 到 此 不 再 匹 配 , 所 以 想 要 生 成 为 静 态 页 面 " 是正则中的有终止的意思,即为匹配到此不再匹配,所以想要生成为静态页面" 是正则中的有终止的意思,即为匹配到此不再匹配,所以想要生成为静态页面"“必不可少。如果url中没有”/“或者”$",如:
url(r'test5',views.test5),
url(r'test6/(\w+).html',views.test6)
第一个路由,通过本机IP:端口号/test5可以访问相应的资源,通过本机IP:端口号/test5adwadaw也可以访问到,所以需要加上"/“或者”$",第二个路由也是同理
3.路由的分发
在自己创建的app中创建一个urls的文件夹,里边写着该app的视图函数对应的路由,在项目的urls中配置如下的路由:
from django.conf.urls import url,include
urlpatterns = [
url(r'^app01/',include("app01.urls"))
]
#app01中配置的路由
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^index.html$', views.index),
]
下面进行解释:在浏览器的地址栏中输入:localhost:8080/app01/index.html,首先父路由即项目路由会匹配到app01,不再匹配后面的路由,然后交给子路由,即创建的app中建立的urls中的路由,app01中的路由会接着匹配app01后面的路由进行匹配,匹配到Index.html,然后找到相应的视图函数,进行相应操作。
分发路由,通过父路由先匹配决定将当前的请求发给哪一个app去处理,然后对对应的app中的子路由去匹配剩下的url,决定调用那个视图函数。
4.路由的别名
通过路由的别名可以反向生成路由
url(r'^index/',views.index,name="a1")#此时为路由命名为"a1"
#视图函数中
from django.urls import reverse
def index(request):
v = reverse("a1") #可以根据路由的别名生成路由
print(v)
return HttpResponse("app01 index")
根据路由的别名生成路由的应用:
<form method="post" action="{% url "a1" %}">
<input type="text" name="username">
</form>
此时表单的提交路径可以直接有路由别名对应到相应的路由,即action="/index/"