Django学习笔记:第三章D的路由和视图

这篇具有很好参考价值的文章主要介绍了Django学习笔记:第三章D的路由和视图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.网站的入口--路由和视图

URL是网站Web服务的入口。用户在浏览器输入URL发出请求后,django会根据路由系统,运行对应的视图函数,然后返回信息到浏览器中。

1.1 认识路由

创建项目时,会自动生成urls.文件,文件中定义了项目的路由信息,成为项目的路由解析入口。在自建的应用中可以手动配置独立的urls.py文件。

1.1.1 路由系统的基本配置

urls.py文件

from django.contrib import admin
from django.urls import path
from myapp import views

urlpatterns = [
    path('index/', views.index, name='index'),
]

先导入对应的视图函数,然后在urlpatterns列表中进行url路由配置

path配置语法

path(路由, 视图函数, 别名)

1.1.2 用“路由包含”简化项目复杂度

思路:为每个应用创建一个urls.py文件,将应用的路由配置分别单独放置。

用户发起请求时,会从根路由寻找每个应用的路由信息,生成完整的路由列表。

路由配置规则:

urlpatterns列表会从上到下进行匹配

  • 匹配成功,会根据视图函数进行跳转

  • 匹配失败,则返回404错误

  • 若定义了子路由,则在跟路由中使用include('应用名.urls') 来加载子路由。如果urls的第一部分被匹配看,则其余部分会在子路由中进行匹配。

  • 路由信息一般以/ 结尾

1.1.3 include使用方法

在 Django 项目中,我们可以通过 URLconf 文件(即 views.py 文件)来定义路由规则。而在这个 URLconf 文件中,我们可以使用 include() 函数来指定自己应该包含的其它 URLconf 模块。

通过include可以设置多级路径,语法:

path('', include('应用名称.urls'))
urlpatterns = [
    path('', include('myapp.urls'))
]

然后在对应的应用路由文件和视图函数进行配置

myapp的urls.py

from django.contrib import admin
from django.urls import path
from myapp import views

urlpatterns = [
	path('myapp/index/', views.index)
]

myapp的views.py

from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse

def index(request):
	return render(request, 'myapp/index.html')

1.1.3 实战一下

  • 在项目根目录运行
python manage.py startapp myapp1
python manage.py startapp myapp2

创建两个应用,myapp1 myapp2

  • 在项目的路由文件中配置
urlpatterns = [
    path('', v.index),  # 这里设置了启动的默认页面
    path('admin/', admin.site.urls),
    path('index/', v1.index, name='index'),
    path('', include('myapp.urls')),
    path('', include('myapp1.urls')),
    path('', include('myapp2.urls'))
]

然后在依次对应用的路由和视图函数进行配置(没有则创建)

  • 在模板中进行html文件编写
  • 启动应用
python manage.py runserver

1.2 路由参数

我们不可能为所有页面都手动配置路由规则,需要引入URL参数进行动态配置。

1.2.1 编写带URL参数的路由

Django动态URL的作用是根据特定的参数动态生成URL。这样,我们可以使用相同的视图函数和模板来处理不同的请求,而不必为每个请求编写单独的视图函数。

这个动态的意思是:根据用户输入的地址信息来显示对应的页面信息。

  • 配置

myappurls.py

urlpatterns = [
	path('myapp/index/', views.index),
    path('myapp/show/<int:id>/', views.show),
]

myappviews.py 增加show函数

def show(request, id):
	return HttpResponse('myapp中的show方法, 参数为id, 值为' + str(id))
  • 启动项目

1.2.2 介绍URL参数

在上面的例子中,路由配置为

path('myapp/show/<int:id>/', views.show),

< > 中的内容就是URL参数,语法:

<参数数据类型 : 参数名称>

URL参数有4种数据类型

参数数据类型 说明
str 任意非空字符串,不包含/ ,默认类型
int 匹配0和正整数
slug 匹配任何ASCII字符,连接符和下划线
uuid 匹配一个UUID格式的字符串,该对象必须包括- ,所有字母必须小写。

1.2.3 [实战] 用re_path() 方法正则匹配复杂路由

与path方法作用一样,多了个可以使用正则表达式的功能。

与path一样,使用时,需要导入模块:

from django.urls import re_path

语法:

(?P<name>pattern)   
# name是匹配的字符串名称,pattern是要匹配的模式
# name并不会显示在地址栏中,只有被匹配的字符才会出现在地址栏
# 可以同时有多个表达式,用&连接

一个例子

myapp应用中,配置urls.py 获取4个数字赋值给year

urlpatterns = [
    path('myapp2/index/', views.index),
    re_path(r'myapp2/list/(?P<year>\d{4})/', views.article_list),
]

myapp应用中,配置views.py

def article_list(request, year):
	return HttpResponse("myapp2中的article方法, 参数为year, 指定4位, 值为" + str(year))
  • 启动

输入超过4个或少于4个 都会访问失败

1.2.4 反向解析路由

反向解析路由是指通过给定的URL路径反向得到Django中定义的路由。它的作用是方便在代码中生成URL,而不需要手动拼接URL。

路由正常进行配置

path('myapp/url_reverse', views.url_reverse, name = 'myapp_url_reverse')
  • name后面名称最好为应用名_视图函数名称
  • name相当于配置项的别名。可以在视图函数或是模板的HTML文件中调用它
  • 根据name得到路由配置中的URL地址,这就是 反向解析路由
  • 优点:只要name不变,URL地址可以任意改变

例子

myapp1 中进行配置

urls.py

path('myapp1/url_reverse/', views.url_reverse, name = 'myapp1_url_reverse')

views.py

from django.urls import reverse # 记得导入
def url_reverse(request):
	# 进行反向解析
	print('反向解析结果:' + reverse('myapp1_url_reverse'))
	return render(request, '2/url_reverse.html')

在模板中新建文件 2/url_reverse.html,添加代码

<div>
    在HTML中使用url标签进行反向解析
    <br>
    {% url 'myapp1_url_reverse' %}
</div>

启动!文章来源地址https://www.toymoban.com/news/detail-595550.html

到了这里,关于Django学习笔记:第三章D的路由和视图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Flink学习笔记》——第三章 Flink的部署模式

    不同的应用场景,有时候对集群资源的分配和占用有不同的需求。所以Flink为各种场景提供了不同的部署模式。 3.1 部署模式(作业角度/通用分类) 根据集群的 生命周期 、 资源的分配方式 、 main方法到底在哪里执行 ——客户端还是Client还是JobManager、 资源管理 将Flink的部署

    2024年02月10日
    浏览(49)
  • 《现代密码学》学习笔记——第三章 分组密码 [二] AES

    版本 密钥长度 分组长度 迭代轮数 AES-128 4 4 10 AES-192 6 4 12 AES-256 8 4 14 (1)字节代换(SubByte) (2)行移位(ShiftRow) (3)列混合(MixColumn) (4)密钥加(AddRoundKey) 1.字节代换   字节代换是非线性变换,独立地对状态的每个字节进行。代换表(S-Box)是可逆的。   将

    2024年02月05日
    浏览(97)
  • JS深入学习笔记 - 第三章.变量作用域与内存

    1.原始值和引用值 ECMScript变量包含两种不同类型是数据:原始值和引用值。 原始值:最简单的数据。有6中原始值:Undefined、Null、Boolean、Number、String和Symbol。原始值是按值访问。 引用值:由多个值构成的对象。三大引用类型:1.object 2.Array类型 3.Function类型。引用值是保存在

    2024年02月08日
    浏览(52)
  • 【UnityShader入门精要学习笔记】第三章(1)Unity Shader介绍

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 从本章节开始我们要学习Shader相关的知识了,诸位看客可能有的

    2024年02月02日
    浏览(71)
  • 《Jetpack Compose从入门到实战》第三章 定制 UI 视图

    -ui.theme.Color.kt ui.theme.Type.kt 先将Nunito Sans字体家族放入 res/font,再根据设计稿写代码 ui.theme/Shape.kt CompositionLocal 是 Jetpack Compose 中的一种数据传递方式。它可以在组合组件之间传递可变数据,而无需通过 props 或 state 管理器来传递数据。这个特性比传统的数据传递方式更为高效

    2024年02月07日
    浏览(48)
  • 数字图像处理第三章 学习笔记附部分例子代码(C++ & opencv)

    本系列博客参考书为, 数字图像处理第三版-冈萨雷斯 第三版教材中图片下载地址: book images downloads vs2019配置opencv可以查看:VS2019 Opencv4.5.4配置教程 后续剧情: 数字图像处理 第四章 频率域滤波 学习笔记 数字图像处理 第六章 彩色图像处理 学习笔记 数字图像处理 第七章 小

    2024年02月03日
    浏览(83)
  • 【计算机网络】学习笔记:第三章 数据链路层【王道考研】持续更新中....

    基于本人观看学习b站王道计算机网络课程所做的笔记,不做任何获利 仅进行交流分享 特此鸣谢王道考研 若有侵权请联系,立删 如果本篇笔记帮助到了你,还请点赞 关注 支持一下 ♡𖥦)!! 主页专栏有更多,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持

    2024年02月01日
    浏览(61)
  • 【UnityShader入门精要学习笔记】第三章(2)Unity Shader的形式,章节答疑

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 (该系列笔记中大多数都会复习前文的知识,特别是前文知识非

    2024年02月02日
    浏览(53)
  • 【计算机网络】学习笔记:第三章 数据链路层(八千字详细配图)【王道考研】

    基于本人观看学习b站王道计算机网络课程所做的笔记,不做任何获利 仅进行交流分享 特此鸣谢王道考研 若有侵权请联系,立删 如果本篇笔记帮助到了你,还请点赞 关注 支持一下 ♡𖥦)!! 主页专栏有更多,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持

    2024年02月06日
    浏览(63)
  • 读书笔记《FPGA之道》第三章

            接触FPGA有一段时间了,期间也做了一些实践实验,虽然最终也是能做出来,可是接触的越多越觉得自己对于这个方向的基础知识的了解还不够系统,很多地方似懂非懂,看网上的教程也都是为了当前实验服务,这让我心里很是没底。对比我的导师们,我认为那个

    2024年01月24日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包