Django视图与路由

在介绍Django视图与路由之前,需要了解一个概念:URL

URL

URL 是统一资源定位符(Uniform Resource Locator)的首字母缩写,中文译为“网址”,表示各种资源的互联网地址。

所谓资源,可以简单理解成各种可以通过互联网访问的文件,比如网页、图像、音频、视频、JavaScript 脚本等等。只有知道了它们的 URL,才能在互联网上获取它们。

比如用浏览器随意打开网络上的一张图片,可以发现在浏览器的地址栏,会展示如下方连接类似的内容:

https://pics4.baidu.com/feed/a6efce1b9d16fdfa32fddf98b51e495e95ee7b4a.jpeg?token=834ef0d6a011d27f661a9cee70e6af02
URL格式内容

URL 的语法格式为:

scheme://DomainName[:port]/path[?query][#fragment]

例如下方这个网址

http://www..baidu.com:8080/news/landscape/search?boardID=5&ID=24618&page=1#r_70732412
scheme(协议)

scheme是指网络传输协议,以下是经常用到的几个协议:

  • http,通过 HTTP 协议访问该资源,格式 http://
  • https,通过安全的 HTTPS 协议访问该资源, 格式https://
  • file,资源是本地计算机上的文件,格式 file://
  • ftp,通过 FTP访问资源,格式 FTP://
DomainName(域名)

指存放资源的服务器的域名、主机名或 IP 地址。本例的www.godsince.com则是域名部分

有时,在主机名前也可以包含连接到服务器所需的用户名和密码(格式:username:password@hostname)。

port(端口号)

端口port跟在域名后面的是端口,域名和端口之间使用 : 作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口。本例的8080则是端口部分

port 是一个可选的整数,它的取值范围 是 0-65535。各种传输协议都有默认的端口号,如 http 的默认端口为 80,https 的端口是 443。

path(路径)

path值虚拟目录(或称为查询路径),由零个或多个/符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。从域名后的第一个/开始到最后一个/为止,路由地址决定了服务端如何处理这个请求。本例的/news/landscape/则是path部分

query (查询参数部分)

?开始到#为止,它们之间的部分就是参数,又称搜索部分或者查询字符串。这个部分允许有多个参数,参数与参数之间用&作为分隔符。本例的参数部分为boardID=5&ID=24618&page=1

fragment(锚部分)

或称片段(fragment),它用于指定网络资源中的片断,例如一个网页中有多个名词解释,那么可使用 fragment 直接对它们定位。

本例中的信息片段是#后的 r_70732412# 代表网页中的一个位置而 r_70732412就是这个位置的标志符号,当浏览器读取到上述 URL 后,浏览器将直接展示该位置。

Django路由系统应用

我们在浏览器中输入百度的网址https://www.baidu.com/,浏览器就会打开百度的web页面。

用户向 Web 站点发送请求,是通过 URL 实现的,当 Web 服务器端接收到用户请求后,Django又是怎么处理的呢?通过 MTV 的设计模式,我们可以得知,首先用户请求会到达相应的视图函数,视图函数通过Django的“路由系统”机制找到相应的访问资源。

如果在浏览器中输入一个网站,通过Django展示某些信息,要如何实现呢?

例如在浏览器中输入URL:http://127.0.0.1:8000/index/,在网页上展示Hello Django

视图函数

视图是 MTV 设计模式中的 V 层,它是实现业务逻辑的关键层,可以用来连接 M 层与 T 层,起着纽带般的作用
请添加图片描述

在 Django 中,视图函数是一个 Python 函数或者类,开发者主要通过编写视图函数来实现业务逻辑。视图函数首先接受来自浏览器或者客户端的请求,并最终返回响应,视图函数返回的响应可以是 HTML 文件,也可以是 HTTP 协议中的 303 重定向

demo 应用中的 views.py中添加以下代码:

from django.shortcuts import render
from django.http import HttpResponse # 导入HttpResponse视图响应类型

# 定义视图函数
def index(request):
    return HttpResponse('<html><body><h1>Hello Django</h1></body></html>')

视图函数解析:

  • 导入HttpResponse视图响应类型。从 django.http 模块中导入 HttpResponseHttpResponse 是一种视图的响应类型。
  • 视图函数参数。定义了一个名为 index 的函数,Django 规定视图函数至少有一个参数,第一个参数必须是 requestrequest HttpRequest 请求类型的对象,它携带了浏览器的请求信息,所以视图函数的第一个参数必须为 request
  • 返回响应内容。视图函数要返回响应内容,这里的响应内容是Hello Django为名的一级标题,把它作为 HttpResponse 的对象返回给浏览器。
路由配置

Django 中利用 ROOT_URLCONF 构建了 URL 与视图函数的映射关系,也就是 Django 项目目录中的 urls.py,该文件是创建项目后自动生成的路由配置文件,urls.py 文件中定义了一个 urlpatterns 的列表,它是由 url( ) 实例对象 组成的列表,Django 中 url 的定义就是在这个列表完成的。

路由的语法格式:

path(route,view,name=None)

path 的参数解析:

  • route,匹配请求路径,用正则表达式表示;
  • view,指定 route 匹配路径所对应的视图函数的名称;
  • name,是给 url 地址起个别名,在模板反向解析的时候使用

在项目目录下的urls.py 文件中添加以下代码:

from django.contrib import admin
from django.urls import path
from demo import views      # 导入demo应用中的视图
from test import views  as test_view

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',views.index),      # 将视图函数添加入路由配置中
    path('home/',test_view.index)
]

路由配置解析:

  • 与视图层进行绑定。导包操作,在项目目录下的urls.py 文件中导入 demo 应用中的 views.py。如果需要从多个应用中导入视图,会出现重名冲突,可采用 as 赋予别名
  • 定义路径地址。路径地址被定义为 index/,也就是在本机浏览器地址栏输入:http://127.0.0.1:8000/index/,进行访问,views.indexindex/路径与 views.py中的index视图函数进行了关联

路由是视图的向导。在浏览器中输入地址,Django 收到请求以后,首先创建一个带有请求信息的 HttpRequset 对象,将 HttpRequest 的对象 request 作为第一个参数传递给视图函数,视图接收参数后继续向下执行后加载路由配置,然后选择加载对应的视图,最后返回 HttpResponse 对象给浏览器。

在项目运行后,通过访问对应的地址就可以得到相应的页面了,在浏览器中输入地址http://127.0.0.1:8000/index/,页面上就会展示Hello Django

【拓展】:在浏览器中输入http://127.0.0.1:8000/index,浏览器会默认在 index 后加上 /。若path中定义的路径没有加上/,而是path('index',views.index),使用浏览器访问http://127.0.0.1:8000/index,就会访问失败

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值