URL控制系统

urls.py文件

urls.py文件是做路由分发的,通过一个叫做urlpatterns的列表,里面的值是一个个的url()方法,这些url()方法对应了一个个URL

下面对这个url()方法做详细介绍

url()参数说明

参数一

参数一是一个正则表达式,例如:r'article/\d{4}',表示可以匹配article/2004也可以匹配article/2011等URL,这在做分页的时候非常方便

从视图函数中获取URL参数

在urls.py中使用正则表达式书写URL,注意:要将正则表达式分组才能拿到想要的参数
例如:url("rticle/(\d{4})", views.index) ,将\d{4}分组

那么在views.py的相应视图函数中就可以得到分组里的参数

views.py

def index(request, year):  # 这个year就是上面分组中的内容,如果有两个分组就传两个参数
    return HttpResponse(year)  # 这样就可以动态的显示Url中的内容

给分组命名

在上面的无命名分组中,虽然可以写多个分组,但是在视图函数中去获取的时候必须按顺序获取,这比较的痛苦,那么当给每个分组命名后,就可以通过名字去绑定分组,不在需要按照顺序去获取,但是给分组命名后,在视图函数中的形参名就必须是跟分组相同的名字,否则就会报错

# 通过 ?P<名字> 给分组命名
url("rticle/(?P<year>\d{4})/(?P<month>\d{2})", views.index)

在views.py中获取分组信息

def index(request, year, month):
	      return HttpResponse("%s, %s" % (year, month))

参数二

url()的第二个参数是要处理该条URL的视图函数

参数三

参数

参数四

第四个参数是一个别名,相当于给该条URL起了一个名字,这样在项目中用到这个URL的时候就用别名代替,以后在更改了该条URL的时候就不用每个地方都修改了

例如:

url('show_time/', views.show_time, name="reg"),  # 这里给该条URL的别名为 reg

在html中调用

{% url 'reg' %}   # 相当于 /show_time/

利用这个名字除了可以在html页面生成URL外,还可以在python中生成,最常见的便是在视图函数中生成,如下一段URL

url(r'^index.html/(?P<username>\w+)$', view.index, name='index')

想要在python中生成对应的URL,可以利用reverse函数

from django.urls import reverse

def index(request):
    # url里面有分组参数
    path = reverse('index', kwargs={'username': 'nice'})
    # url里面没有分组参数
    path = reverse('index')

以上便是在python中生成URL的方法

url分发

当项目大起来的时候,URL过多,全部放在一个文件下回很乱,而且还会相互影响,所以应该在每一个应用下面单独放一个urls.py文件,用于存放本应用的URL,然后把这个urls.py文件跟主urls,py关联起来就可以了

在主urls.py文件中配置

from django.contrib import admin
from django.urls import path
from django.conf.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include("blog.urls")),    # 添加这样一行与blog应用的urls.py文件关联,表示下一次URL中有 blog/的全部去 blog.urls 里面去找
    path('chat/', include('chat.urls')),
]

应用下的urls.py

在blog应用目录下新建一个urls.py文件,在里面写有关于blog应用的URL

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

urlpatterns = [
    url(r'show_time', views.show_time),    
]

这样后,URL路径就变成了 127.0.0.1:8000/blog/show_time,注意必须要有/blog才能进blog目录下的urls.py文件继续查找 /show_time URL

posted @ 2018-07-01 17:26  Jin同学  阅读(181)  评论(0)    收藏  举报