• django–url


    当我们创建了一个项目时,系统为我们创建了一份urlconf, 它可能是这样的:

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
    ]
    • r’^admin/’中的r 表示这是一个原始字符串,这样避免了使用过多的转义符
    • 不需要在^admin/前面加/,  因为django会自动为表达式添加。
    • ^ 表示对字符串的头部进行匹配,看下面的例子:
    '^admin/'      表示以time/开始的任意url都会匹配,比如/admin/foo 和 /admin/bar

    现在路由只有一条,那我们想要在我们的页面上显示时间, 下面来进行这些操作:

    首先我们要在views里创建一个显示时间的函数:

    from django.shortcuts import render, HttpResponse
    import datetime
    
    def show_time(request):
          now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
          html = '<html><body>%s</body></html>'  % now
         return HttpResponse(html)

    视图已经有了,如果想让它在页面上显示的话,我们还需要一个路由:

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^time/$', views.show_time),
    ]

    我们添加的这条路由多了一个$ 号,  意思是 对字符串的尾部进行匹配.  '^time/$' 就是匹配/time/不能多也不能少。

    这样我们就可以通过http://localhost:8000/time看到输出结果了。

    总结一下url里的正则:

    符号 匹配
    . 任意字符
    d 任意数字
    [A-Z] A-Z中的任意字符
    [a-z] a-z中的任意字符
    [A-Za-z] 任意大小写字母
    + 匹配一个或多个前面的字符
    [^/]+ 匹配一个或多个不是/的字符
    * 匹配0个或多个前面的字符
    {1,3} 匹配1个到3个前面的字符

    最后,是一些示例:

    注意:url匹配是从上往下,有匹配的就不往下走了,所以一般把精确匹配的放在上面
    
    url(r'^admin/', admin.site.urls),   
    
    url(r'^articles/2003/$', views.special_case_2003),
    
    url(r'^articles/([0-9]{4})/$', views.year_archive),     #url传递给views时会传递两个值,一个是request, 一个是([0-9]{4})匹配到的值
    
    url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),     #request, 两个正则匹配的值,  一个() 一个参数
    
    url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.month_archive),
    
    url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+).(w+)/$', views.month_archive),
    
    
    
    url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),       #year表示给正则一个别名,在正则中可以通过obj.group('year')获取到匹配到的值
    这里需要注意的是:如果url里指定了别名是year, 那么在views中参数名也必须叫year, 否则会报错,但是参数位置就没关系 了。。
    
    views接收到的参数总是字符串类型。


    url中的include

    如果我们的项目有多个app, 那么我们可以将每个app的url分离出来,这样可以每个app单独管理,方便 维护:

    from app01 import urls as payment_urls
    
    url(r'^payment/',  include('payment_urls')),
  • 相关阅读:
    视频编码之释——从H.261 到H.264
    bitmap图像介绍
    用搜索引擎搜索我的名字 @_@
    blog标题由来
    ORACLE双机热备安装及物理迁移 for win2000
    审核再次失败
    asp.net学习历程
    痛并快乐着
    开心,blog点击率超过1000
    XP下ASP.NET不能访问ORACLE数据库的解决方案
  • 原文地址:https://www.cnblogs.com/huangxm/p/5554810.html
Copyright © 2020-2023  润新知