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。这样,我们可以使用相同的视图函数和模板来处理不同的请求,而不必为每个请求编写单独的视图函数。
这个动态的意思是:根据用户输入的地址信息来显示对应的页面信息。
- 配置
在myapp的urls.py
urlpatterns = [
path('myapp/index/', views.index),
path('myapp/show/<int:id>/', views.show),
]
在myapp 的views.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>
启动!

Django学习笔记:第三章D的路由和视图的更多相关文章
- Django学习笔记(三)—— 型号 model
疯狂暑期学习 Django学习笔记(三)-- 型号 model 參考:<The Django Book> 第5章 1.setting.py 配置 DATABASES = { 'defaul ...
- 《DOM Scripting》学习笔记-——第三章 DOM
<Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...
- The Road to learn React书籍学习笔记(第三章)
The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...
- [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设
[HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设 敲黑板!! <q>元素添加短引用,<blockquote>添加长引用 在段落里添加引用就使用< ...
- JVM学习笔记-第三章-垃圾收集器与内存分配策略
JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...
- Spring学习笔记 - 第三章 - AOP与Spring事务
原文地址:Spring学习笔记 - 第三章 - AOP与Spring事务 Spring 学习笔记全系列传送门: Spring学习笔记 - 第一章 - IoC(控制反转).IoC容器.Bean的实例化与 ...
- Qt 学习笔记 - 第三章 - Qt的三驾马车之一 - 串口编程 + 程序打包成Windows软件
Qt 学习笔记全系列传送门: Qt 学习笔记 - 第一章 - 快速开始.信号与槽 Qt 学习笔记 - 第二章 - 添加图片.布局.界面切换 [本章]Qt 学习笔记 - 第三章 - Qt的三驾马车之一 ...
- Django 学习笔记(三)模板导入
本章内容是将一个html网页放进模板中,并运行服务器将其展现出来. 平台:windows平台下Liunx子系统 目前的目录: hello ├── manage.py ├── hello │ ├── _ ...
- python学习笔记——第三章 串
第三章 字符串学习 1.字符串不灵活, 它不能被分割符值 >>> format = "hello, %s. %s enough for ya?" >> ...
- JavaScript高级编程学习笔记(第三章之一)
继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...
随机推荐
- 【ACM算法竞赛日常训练】DAY16【奇♂妙拆分】【区区区间间间】【小AA的数列】数学 | 位运算 | 前缀和
DAY16共3题: 奇♂妙拆分(简单数学) 区区区间间间(单调栈) 小AA的数列(位运算dp) 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通俗易懂的方式讲解算法!️ ...
- 劲(很)霸(不)酷(好)炫(用)的NLP可视化包:Dodorio 使用指北
朋友们,朋友们,事情是这样的.最近心血来潮,突然想起很久以前看过的一个NLP可视化包.它的效果是下面这个样子: 在此之前,已经有一些文章从论文的角度对这个包进行了介绍,详情请见 推荐一个可交互的 At ...
- C# 系统菜单弹出框方向
右键菜单,tootip等弹出时,弹出的位置经常在左侧,使用体验不好. 弹出方向有左对齐和右对齐 SystemParameters.MenuDropAlignment 当右对齐时,值为false 可以在 ...
- C语言快速入门教程1快速入门 2指令 3条件选择
快速入门 什么是C语言? C是一种编程语言,1972年由Dennis Ritchie在美国AT & T的贝尔实验室开发.C语言变得很流行,因为它很简单,很容易使用.今天经常听到的一个观点是-- ...
- 【Python基础】集合的基本使用
Python中的集合是一种无序且唯一的数据结构.集合是通过花括号{}或者set()函数来创建的. 创建集合 s = set() 声明空集合 s = {1,2,3,4,5} 声明非空集合 添加元素 s. ...
- 2020-12-02:mysql中,一张表里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记
2020-12-02:mysql中,一张表里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记 ...
- 2021-04-09:rand指针是单链表节点结构中新增的指针,rand可能指向链表中的任意一个节点,也可能指向null。给定一个由Node节点类型组成的无环单链表的头节点 head,请实现一个函数完成这个链表的复制,并返回复制的新链表的头节点。 【要求】时间复杂度O(N),额外空间复杂度O(1) 。
2021-04-09:rand指针是单链表节点结构中新增的指针,rand可能指向链表中的任意一个节点,也可能指向null.给定一个由Node节点类型组成的无环单链表的头节点 head,请实现一个函数完 ...
- Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535.
问题描述 新建表或者修改表varchar字段长度的时候,出现这个错误 Row size too large. The maximum row size for the used table type, ...
- 【GiraKoo】Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
[解决]Could NOT find PkgConfig (missing PKG_CONFIG_EXECUTABLE) 环境 Ubuntu 22.04 现象 在编写CMakeLists.txt时,调 ...
- Charles抓包补充解释
配置 大佬的博客真的很详细很详细,我就不重复造轮子了,第一次直接看大佬的博客就好,这里Python爬取微信小程序(Charles) 补充解释 在这一步疑问很多,大佬说的不是很详细,就由我来补充下吧~ ...