django-视图

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中的配置项进行匹配的时候

  1. 第一轮和index匹配失败,和a匹配成功
  2. 匹配成功的那部分字符将被删除,使用删除后的字符串继续匹配,即index,所以会和第一个配置项匹配成功,执行视图函数index()
    更多内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值