python自动化运维学习第十七天--urls

urls

urls.py文件是对请求的路由,通过访问不同路径进行不同的处理。
如前几篇文章中写的urls.py文件

from django.conf.urls import url
from django.contrib import admin
from demo import views     #导入demo包下的views模块,后来添加的

urlpatterns = [
    url(r'^admin/', admin.site.urls),      #其中括号内第一个参数为匹配的内容,第二个参数为匹配后执行的方法
    url(r'^login/$', views.login),         #login的请求转发给views模块内的login函数处理,后来添加的
]

那么问题来了,如果要匹配的页面比较多,有几十上百,都写在这个脚本中会显得比较乱,不够简洁也不够直观。这时可以通过匹配一级路径,跳转到其他脚本来完成二级甚至三级路径的匹配。
下面看优化后的urls.py代码

from django.conf.urls import url, include    #添加了一个include项
from django.contrib import admin
from demo import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^login/$', views.login),
    url(r'^api/', include('demo02.urls')),       #首先匹配到api这个一级路径,然后跳转到demo02.urls这个模块去继续匹配二级路径
]

先使用命令去创建一个名字为demo02的app
python manage.py startapp demo02
在demo02目录下新建一个urls.py文件

from django.conf.urls import url, include
from django.contrib import admin
from demo02 import views        #导入demo02下的views模块

urlpatterns = [
    url(r'^list.html', views.list),       #匹配二级路径list.html,跳转到demo02下的views.py的list方法处理
    url(r'^add.html', views.add),         #匹配二级路径add.html,跳转到demo02下的views.py的add方法处理
    url(r'^update.html', views.update),   #匹配二级路径update.html,跳转到demo02下的views.py的update方法处理
    url(r'^delete.html', views.delete),   #匹配二级路径delete.html,跳转到demo02下的views.py的delete方法处理
]

demo02下的views.py内容

from django.shortcuts import render,HttpResponse

def list(request):      #处理demo02下的urls.py中的list.html的请求
    return HttpResponse('this list')

def add(request):      #处理demo02下的urls.py中的add.html的请求
    return HttpResponse('this add')

def update(request):   #处理demo02下的urls.py中的update.html的请求
    return HttpResponse('this update')

def delete(request):   #处理demo02下的urls.py中的delete.html的请求
    return HttpResponse('this delete')

然后启动项目,访问http://127.0.0.1:8000/api/list.html就会返回一个显示“this list”字符的页面,访问http://127.0.0.1:8000/api/ladd.html同理会显示“this add”。
整个流程就是当你访问http://127.0.0.1:8000/api/list.html这个页面时,项目下的utls.py首先会匹配到api这个一级路径,然后根据使用的include方法,跳转到demo02这个app下的urls.py,再次匹配到list.html这个二级路径,跳转到该app(demo02)下的views.py文件的list方法去处理该次请求,最后返回给客户端一个显示“this list”的页面。

如果需要从url中获取一些参数时,如页面翻到第几页等,这时可以在urls.py文件中配置正则匹配来获取该参数,下面看urls.py中的代码

urlpatterns = [
    url(r'^blog/$', views.page),
    url(r'^blog/page(?P<num>[0-9]+)/$', views.page),      #括号中的?P<num>[0-9]+就是获取url中的参数,使用了正则匹配。?P是固定写法,<num>[0-9]+表示0-9的数字参数赋值给num这个变量,这样num就拿到了参数值,这个num是字符串类型
]

urls.py就拿到了这个参数,并且把它放到num这个变量中。views.py想要接收这个参数,需要在方法中添加一个参数。
注意:urls.py里拿到参数值的变量num类型为str,想要使用数字需要用int转换
views.py代码

def page(request, num="1"):   #num这个参数来接收urls.py中变量的值,默认是1
    pass

猜你喜欢

转载自blog.csdn.net/wang035759984/article/details/85110091