首页 > 其他分享 >Django学习笔记:第三章D的路由和视图

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

时间:2023-07-22 23:34:03浏览次数:40  
标签:index myapp views 视图 Django urls path 路由

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文件编写

image-20230722195616877

  • 启动应用
python manage.py runserver

image-20230722195632675

image-20230722195703487

image-20230722195721157

image-20230722195736871

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))
  • 启动项目

image-20230722203720851

image-20230722203741144

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))
  • 启动

image-20230722220521548

输入超过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>

启动!

image-20230722232215752

标签:index,myapp,views,视图,Django,urls,path,路由
From: https://www.cnblogs.com/lmc7/p/17574517.html

相关文章

  • 全局路由前缀配置
    1、新建RouteConventio.cs文件///<summary>///全局路由前缀配置///</summary>publicclassRouteConventio:IApplicationModelConvention{///<summary>///定义一个路由前缀变量///</summary>privatere......
  • python 使用django 快速搭建API接口
    Python使用Django快速搭建API接口介绍在Web开发中,API(ApplicationProgrammingInterface)接口是用于不同系统之间进行数据交换的重要手段。Django是一个功能强大的PythonWeb框架,可以快速搭建高效的API接口。本文将介绍如何使用Django快速搭建API接口,并提供代码示例。准备工作在......
  • MySQL之视图检查选项
    MySQL之视图检查选项视图的检查选项当使用WITHCHECKOPTION子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如插入,更新,删除,以使其符合视图的定义。MySQL允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围,mysql提供了两个选项:CASC......
  • 如何在 SQL Server 2016 中为可用性组配置只读路由
    SQLServerAlwaysOn可用性组概念在SQLServer2012中首次引入,作为企业级高可用性和灾难恢复解决方案,将取代数据库镜像功能。AlwaysOnAvailabilityGroup在组级别提供高可用性解决方案,其中每个组可以包含任意数量的数据库,这些数据库可以复制到多个辅助服务器(称为副本)。SQL......
  • MySQL之视图CRUD
    MySQL之视图CRUD介绍视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SOL查询......
  • Django学习笔记:第二章django的安装和创建应用
    1.安装Django终端运行pipinstalldjango查看django是否安装成功python-mdjango--version1.1安装虚拟环境在控制台运行pipinstallvirtualenv1.1.2创建虚拟环境在特定文件夹内打开终端运行virtualenv-pD:\program_condition\python\python.exeenv_djvir......
  • Django响应
    响应对象:HttpResponse对象​ 响应对象主要有三种形式:HttpResponse()、render()、redirect()。(1)HttpResponse():返回文本,参数为字符串,字符串中写文本内容。如果参数为字符串里含有html标签,也可以渲染。defrunoob(request):#returnHttpResponse("菜鸟教程")retu......
  • nesp华为设备模拟器-->静态路由两个网段互联
    静态路由配置,需求如下,PC2需要访问Server1服务器。 软件安装:我下载的是hwmnqensp.rar这个安装包,他是一个整体,不像官网下载那么多包。分析:这里client终端和server服务器,自行配置ip、掩码和网关,LSW二次交换机无需配置;AR1和AR4为路由器,所以需要配置。基础命令:进入用户视图<......
  • 【补充】Django框架之IFrame中的跨域问题
    【一】iframe中的跨域问题详解在网页开发中浏览器会应用跨域安全策略,限制不同域名之间的交互。跨域问题指的是如果一个网页的脚本尝试访问另一个域名下的资源或与其通信时,浏览器会拒绝这样的请求。其中,使用<iframe>标签嵌套其他网页是一种常见的前端技术。然而,由于<i......
  • MySQL(视图、事务、存储过程、函数、流程控制、索引)
    一视图(了解)什么是视图视图就是通过查询得到一张虚拟表,然后保存下来,下次可以直接使用为什么要用视图如果要频繁的操作一张虚拟表(拼表组成的),你就可以制作成视图,后续直接操作视图其实也是一张表如何操作#固定语法createview#具体操作createviewteacher2......