Django篇之路由系统

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/"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值