1.定义视图函数
from django.http import HttpResponse
#http://127.0.0.1:8000/index
def index(request):
return HttpResponse('django ok')
2.进行url配置
- 在goods App下面新建urls.py文件
from django.conf.urls import url
from goods import views
urlpatterns = [
# 通过url函数设置url路由配置项
url(r'^index$', views.index), # 建立/index和视图之间的关系
]
- 在项目urls.py文件中进行配置
from django.contrib import admin
from django.urls import path, re_path, include
urlpatterns = [
path('admin/', admin.site.urls), # 配置项目
re_path(r'^', include(
'goods.urls'
)), # 包含app goods中的urls文件
]
这里注意,django新版本中不再使用url()进行配置,但是提供了re_path()对低版本进行兼容。
3. 运行
python manage.py runserver
匹配流程
1.项目的urls.py配置文件通过127.0.0.1:8000/index中得到index字符串
2. 将其和配置列表urlpatterns[]中的字符串进行匹配,匹配成功之后得到对应include()中的goods.url
3. 再到goods app中匹配urls.py文件中的配置项进行匹配,发现与之对应的是一个视图views.index,则执行对应的views.py中的视图函数index()
探讨1
再添加一个视图函数index2
def index(request):
return HttpResponse('django ok')
# http://127.0.0.1:8000/index2
def index2(request):
return HttpResponse('Hello django')
在app下的urls.py中进行配置
urlpatterns = [
# 通过url函数设置url路由配置项
url(r'^index', views.index), # 建立/index和视图函数之间的关系
url(r'^index2', views.index2) # 建立/index2和视图函数之间关系
]
发现依然调用的是index()视图函数,因为匹配的时候是循环自上向下匹配的,如果匹配成功就执行视图函数后面的配置项就不再判断了。
做如下修改:
urlpatterns = [
# 通过url函数设置url路由配置项
url(r'^index$', views.index), # 建立/index和视图之间的关系
url(r'^index2$', views.index2) # 自上向下匹配,如果配置成功后面的就不再判断了
# $ 严格匹配开头和结尾
]
探讨2
修改代码如下
urlpatterns = [
# 通过url函数设置url路由配置项
url(r'^index', views.index), # 建立/index和视图之间的关系
url(r'^a', views.index2) # 自上向下匹配,如果配置成功后面的就不再判断了
# $ 严格匹配开头和结尾
]
为什么这里可以显示视图函数index()的内容?
当用户输入http://127.0.0.1:8000/aindex时获得aindex字符串,按照上面的流程执行,当对goods/urls.py中的配置项进行匹配的时候
- 第一轮和index匹配失败,和a匹配成功
- 匹配成功的那部分字符将被删除,使用删除后的字符串继续匹配,即index,所以会和第一个配置项匹配成功,执行视图函数index()
更多内容