路由的格式:

#路由配置的格式:
urls.py里面写

from diango.conf.urls import url

urlpatterns = [
         url(正则表达式,views视图函数,name)     

]

 

一:无名分组

路由urls.py的配置

from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),

    #没有参数
    #\d+ 后面可以匹配一个或无穷个数字的访问格式:例如http://127.0.0.1:8000/test2/12345
    url(r'^test2/\d+$', views.test2),

    #一个分组:(\d+),对应视图层就要1个参数接收对应分组
    #(\d+) 也是匹配后面一个或无穷个数字的访问格式(但是括号本身还是一个参数,对应视图里面的视图函数要接收这个参数)
    url(r'^test3/(\d+)', views.test3),  #视图函数里面就可以直接拿到这个后面输入的参数值

    #3个分组:([0-9]{4})..,对应视图层就要3个参数接收对应分组
    url(r'^test4/([0-9]{4})/([0-9]{2})/([0-9]{1})/$', views.test4),  # 加括号就可以拿到浏览器中输入的值

]

 

相对上面路由,views.py视图里面的配置

from django.shortcuts import render,HttpResponse

# Create your views here.
def test1(request):
    return HttpResponse('test1')

#不需要传入参数
def test2(request):
    return HttpResponse('test2')

#需要传入1个参数
def test3(request,num):
    print(num)
    return HttpResponse('test3'+num)

#需要传入3个参数
def test4(request,y,m,d):
    print(y,m,d)
    return HttpResponse('对于路由传入多个参数的响应:  %s年 %s月 %s日'%(y,m,d))

 

 注意的点就是:

  1.第一个参数,可以写一个正则表达式

  2.urls.py里面有多个路由条目,一旦匹配成功就不往下走了

  3.如果路由url里面分了几个组,响应的views视图函数里面就应该有几个参数来接收

  4.在settings里设置:APPEND_SLASH=False,请求时,浏览器不会自动补全斜杠,这样当你浏览器输入时后面没有加斜杠(与你url路由里面的不符就会报错)

settings.py里面关于APPEND_SLASH=False的说明

from django.conf.urls import url
from app01 import views

urlpatterns = [
        url(r'^blog/$', views.blog),
]

访问 http://www.example.com/blog 时,默认将网址自动转换为 http://www.example/com/blog/ 

如果在settings.py中设置了 APPEND_SLASH=False,此时我们如果输入后面没有加斜杠http://www.example.com/blog 时就会匹配失败,提示找不到页面。

 

 

二:伪静态页面

有些.html结尾的网页大多数都是伪静态页面,就是为了百度seo收录(如果变动的百度的收录会特别低,百度数据库里面很难收录你的信息,收录权限比较低,为了让百度提高收录权限)

例如:Diango路由控制其实后面的数字就是你访问某个网站具体资源对应的id

正常对应的动态访问地址:Diango路由控制 (这里是指举例,可能对应的字段名不一定是id)

 

静态网页与动态网页之间的转换简单实现:

#静态网页
    url(r'^test5/(\d+).html', views.test5)

Diango路由控制

 

三:有名分组

 #有名分组:路由设置
    url(r'^test6/(?P<year>[0-9]{4})/(?P<month>[0-9]{2}/(?P<day>[0-9]{1}))', views.test6),

#视图设置:views.py
def test6(request,year,month,day,):
    print(year,type(year))
    print(month)
    print(day)
    return HttpResponse('有名分组,接收年月日三个参数')

Diango路由控制

有名分组注意点:

1.名字必须一致,否则报错,位置可以颠倒,如果分了两个组,必须用两个参数连接

2.有名分组和无名分组不要混用

3.有名分组可以用**kwargs接收,无名分组可以用*args接收

4.分组捕获的单数,都是str类型

5.可以设置默认值

*args接收多个无名路由 与 **kwargs接收多个有名路由:

无名路由分组:
url(r'^test4/([0-9]{4})/([0-9]{2})/([0-9]{1})/$', views.test4)

无名视图接收方式一:
def test4(request,y,m,d):
    print(y,m,d)
    return HttpResponse('对于路由传入多个参数的响应:  %s年 %s月 %s日'%(y,m,d))

无名视图接收方法二:
def test4(request,*args):
    print(args,type(args)) #元组格式       #('2001', '10', '3') <class 'tuple'>
    return HttpResponse('无名路由传入多个参数的响应')





有名路由分组:
url(r'^test6/(?P<year>[0-9]{4})/(?P<month>[0-9]{2}/(?P<day>[0-9]{1}))', views.test6),

有名视图接收方式一:
def test6(request,month,day,year):
    print(year,type(year))
    print(month)
    print(day)
    return HttpResponse('有名分组,接收年月日三个参数')

有名视图接收方法二:
def test6(request,**kwargs):
    print(kwargs,type(kwargs)) #字典格式  #{'year': '2018', 'month': '12/4', 'day': '4'} <class 'dict'>

    return HttpResponse('有名分组,接收年月日三个参数')
有名路由、无名路由视图的2种接收方法

相关文章:

  • 2021-11-13
  • 2022-01-23
  • 2021-06-05
  • 2021-12-12
  • 2022-01-19
  • 2021-12-16
  • 2022-02-17
猜你喜欢
  • 2022-12-23
  • 2021-04-04
相关资源
相似解决方案