当前位置: 首页 > news >正文

Django路由层

路由层(urls)

        Django的路由层是负责将用户请求映射到相应的视图函数的一层。在Django的MVT架构中,路由层负责处理用户的请求,然后将请求交给相应的视图函数进行处理,最后将处理结果返回给用户。

在Django中,路由层的配置文件是urls.py,这个文件定义了每个URL模式(也被称为路由)以及该URL模式应该映射到哪个视图函数进行处理。

Django的路由层支持多种不同的URL模式,包括普通的字符串URL、正则表达式URL和动态URL参数等。其中最常用的是字符串URL和正则表达式URL。

在Django的路由层中,还可以通过传递参数给视图函数,实现对请求进行更加灵活的处理。这些参数可以从URL中提取,也可以从请求的GET或POST参数中提取。

总之,在Django中,路由层是一个非常重要的组件,它起到了解析请求、选择视图函数和传递参数等多个功能。了解Django的路由层是学习和开发Django项目的基础


路由匹配
django1.x 第一个参数是正则表达式django2.x及以上版本  path第一个参数写什么就匹配什么  匹配到直接执行对应的视图函数
path('admin/', admin.site.urls)
路由错误匹配级原因
使用浏览器打开web页面:127.0.0.1:8000/test 与testaddurlpatterns = [path('admin/', admin.site.urls),# path('test/', views.test),# path('testadd/', views.testadd),re_path('test', views.test),re_path('testadd', views.testadd)
]

访问testadd

访问test

所得到的结果是一致的,而testadd的页面并没有进入。

        原因:按照匹配规则,从上到下只要正则表达式匹配成功,就不会往下执行,当路由匹配到第一个正则(test)就成功匹配了,就不会往下执jies

解决上述问题

方式一

urlpatterns = [path('admin/', admin.site.urls),# path('test/', views.test),# path('testadd/', views.testadd),re_path('test/', views.test),re_path('testadd/', views.testadd)
]
"""我们在输入url时Django会自动帮我们加上斜杠
因为Django内部帮我们做了重定向,一次匹配不行,所以在URL后面我们手动加上斜杠"""

方式二

我们可以在配置文件settings中添加

APPEND_SLASH =True/False"""默认为True,不加斜杠"""

这样页面就正确进入

设置主页

我们如果需要设置主页时,可以使用“空”
 

urlpatterns = [path('', views.home), #这是主页re_path('test/', views.test),re_path('testadd/', views.testadd),]

无名分组

        无名分组就是把正则中小括里匹配到的内容以位置参数传输视图函数

当我们知道Django2中re_path中可以使用正则,name我们可以添加正则

urlpatterns = [path('admin/', admin.site.urls),re_path('^test/(\d+)$', views.test),

添加完之后我们可以看到,页面报错了,说缺少一个参数

解决方法,在views中添加一个参数即可

def test(request, t):return HttpResponse('test')

get传参的两种方式

第一种:http://127.0.0.1:8000/test/?a=1&b=2

第二种:http://127.0.0.1:8000/test/12/1

有名分组

    无名分组就是把正则中小括里匹配到的内容关键字参数传输视图函数

在我们添加有名分组时,需要再test这进行传参。

urlpatterns = [re_path(r'^test/(?P<ss>\d+)$', views.test),"""代码为"""def test(request, ss):return HttpResponse('test')urlpatterns = [re_path(r'^test/(?P<ss>\d+)/(?P<mon>\d+)$', views.test),"""添加一个参数即可"""
def test(request, ss, mon):return HttpResponse('test')

无名和有名分不能混合使用!!!但是无名和有名可以使用多次

反向解析

1.概念

​ 通过一些方法得到一个结果 该结果可以直接访问对应的url触发视图函数 实现url路由频繁变化,html界面与后端动态解析连接地址操作步骤:

"""1.解析路由配置"""path('v1/login/', views.home, name='log')"""后端反向解析""""""导入模块reverse"""
from django.shortcuts import reverse反向解析def login(request):res=reverse('log')print(res)return HttpResponse('login')前端反向解析<a href="{% url 'log' %}">点我解析</a>

无名分组反向解析
解析路由配置
re_path(r'^testadd/(\d+)$', views.testadd)反向解析def testadd(request, xx):res = reverse('jk', args=(1,))print(res)"""args中的值只要是符合正则表达式,就会把这个值拼到前面路由配置中"""前端反向解析<a href="{% url 'jk' 1 21%}">点我解析</a>多个参数只需在后面添加即可

有名分组反向解析

解析路由配置re_path(r'^v1/v2/home(?P<ss>\d+)$', views.home, name='jk'),反向解析def testadd(request, **kwargs):res = reverse('jk', kwargs={'ss': 123})print(res)"""args中的值只要是符合正则表达式,就会把这个值拼到前面路由配置中"""前端反向解析<a href="{% url 'jk' ss=1 %}">点我解析</a>多个参数只需在后面添加即可
有名参数用的是什么名,那么在testadd中也要使用相同的名称

  路由分发

        Django的全局路由文件是urls.py这个文件
随着项目的复杂程度越来越来越大,路由肯定也是越来越多,路由文件就会增加很多的路由地址,就会导致路由文件很混乱,不好管理,也不够清晰,我们可以把总路由文件进行拆分,拆分到各个应用下面去,每一个应用都可以有自己的路由文件

路由分发之后,总路由文件就不在作为地址匹配了,只是为了分发而已

为什么使用路由分发
  • 解决项目的总路由匹配关系过多的情况
  • 总路由分开于干路由与视图函数的的直接对应关系
  • 总路由是一个分发处理(识别当前url是属于哪个应用下的,直接分发对应的应用去处理)
  • 当请求来了,总路由不做对应关系,根据请求直接访问哪个app的功能,直接将请求发送给对应的app
  • 提前创建好应用app01(创建即注册)、app02,然后记得注册app02

方式一:

1.需要导入一个include路由分发模块
from django.conf.urls import url,include
2.导入子路由的urls  为了重名,起别名
from app01 import urls as app01——urls
from app02 import urls as app02——urls
urlpatterns = [url(r'^admin/', admin.site.urls),# 1.路由分发url(r'^app01/',include(app01_urls)),  # 只要url前缀是app01开头 全部交给app01处理url(r'^app02/',include(app02_urls))   # 只要url前缀是app02开头 全部交给app02处理
]

方式二:

1.需要导入一个include路由分发模块
from django.urls import path,include
2.总路由分发  简易>>>推荐
urlpatterns = [
# 路由分发终极写法 简便path('app01/',include('app01.urls')),path('app02/',include('app02.urls'))

伪静态

伪静态:把动态页面改成静态页面

动态页面:不是在html中固定的,他是根

据后端数据变化而变化

伪装的目的:更好的被各大网站所搜索

seo:优化关键词容易被搜索

sem:广告

虚拟环境

针对不同的项目,会使用不同的解释器,多个项目不能只用一个解释器,所以我们根据项目来使用解释器

每个解释器只针对一个项目的模块

可以使用pycharm建立虚拟环境

Django1和2的区别

1.路由文件:

Django1中的使用的是url:支持正则表达式Django2中使用的是path(精准匹配):不支持正则表达式但是re_path(相当与Django1中URL)支持正则表达式

Django默认支持以下5个转化器:

● str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
● int,匹配正整数,包含0。
● slug,匹配字母、数字以及横杠、下划线组成的字符串。
● uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
● path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)

自定义转化器
2. 创建表关系
    django2中必须指定参数:on_delete:
    djanxo1中不用指定:级联更新级联删除

例:

from django.urls import register_converter,path
class my_flod:regex = '[0-7] {5}'def to_python(self,value):return int(value)def to_url(self,value):return '%04d' % valuepath('index/<xx:id>', views.index)

使用转换器int


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

使用转换器只需要在后面添加<转化器:>即可

相关文章:

Django路由层

路由层&#xff08;urls&#xff09; Django的路由层是负责将用户请求映射到相应的视图函数的一层。在Django的MVT架构中&#xff0c;路由层负责处理用户的请求&#xff0c;然后将请求交给相应的视图函数进行处理&#xff0c;最后将处理结果返回给用户。 在Django中&#xff0c…...

关于session的不断变化问题

今天在帮同学解决一个小问题&#xff0c;差点阴沟翻船。 问题再现&#xff1a;他从github上拉了一个项目下来跑&#xff0c;结果发生跑不通问题出现在验证码一直不对。 我一看项目源码&#xff0c;验证码生成后存储再session中了&#xff0c;等用户发送请求验证的时候sessionI…...

eNSP启动路由器一直出#号、以为是安装配置winpcap的问题。。。。(以为是win10安装winpcap失败的问题。。。)

问题描述&#xff1a;eNSP启动一直出#号的一种参考方法_ensp一直#_Hong的博客-CSDN博客 原因是看了这篇博客&#xff0c;觉得ensp启动路由器的时候一直出现&#xff03;号是因为winpcap安装的时候出现的问题。查看自己的winpcap安装成功之后的目录是&#xff1a; 然后因为那篇…...

时间序列预测:深度学习、机器学习、融合模型、创新模型实战案例(附代码+数据集+原理介绍)

本文介绍->给大家推荐一下我的时间序列预测实战专栏&#xff0c;本专栏平均质量分98分&#xff0c;而且本专栏目前免费阅读。其中涉及机器学习、深度学习、融合模型、个人创新模型、数据分析等一系列有关时间序列的内容&#xff0c;其中的实战案例不仅有简单的模型类似于机器…...

docker安装RocketMQ

1、RocketMQ基本概念 1.1 消息模型&#xff08;Message Model&#xff09; RocketMQ主要由Producer、Broker、Consumer三部分组成&#xff0c;其中Producer负责生产消息&#xff0c;Consumer负责消费消息&#xff0c;Broker负责存储消息。Broker在实际部署过程中对应一台服务…...

优秀智慧园区案例 - 珠海华发智慧园区,万字长文解析先进智慧园区建设方案经验

一、项目背景 珠海华发产业园运营管理有限公司&#xff08;简称“产业园公司”&#xff09;是2016年起连续五年跻身“中国企业500强”、国务院国企改革“双百企业”的珠海华发集团旗下的实体产业发展载体运营平台&#xff0c;依托“四园一基地”&#xff1a;中以国际产业园、信…...

毕业设计项目:基于java+springboot的共享单车信息网站

运行环境 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Ma…...

Redis 连接不上 WRONGPASS invalid username-password pair

1.我的RedisDesktopManager 可以连接 但是 Springboot远程使用Redis就是连不上 2.我的密码是 abc123.. 多了英文的 ..符号 在Springboot过不了&#xff0c;所以Redis密码尽量字母数字&#xff0c;不要其他符号...

三分钟学完Git版本控制常用指令

基本指令 git clone [url] 克隆远程仓库到本地 git clone https://gitee.com/mayun2023a/mprpc.git2.git checkout -b xxx 切换至新分支xxx&#xff08;相当于复制了remote的仓库到本地的xxx分支上) 3.修改或者添加本地代码&#xff08;部署在硬盘的源文件上&#xff09; 4.g…...

vue3使用粒子特效

安装 //使用npm安装 npm install particles.vue3 --save//使用yarn安装 yarn add particles.vue3 --save//必须得装 npm i tsparticles 使用 main.js import Particles from particles.vue3 const app createApp(App) app.use(Particles)//使用粒子特效 页面使用 <sc…...

DMDEM部署说明-详细步骤-(DM8达梦数据库)

DMDEM部署说明-详细步骤-DM8达梦数据库 环境介绍1 部署DM8 数据库1.1 创建一个数据库作为DEM后台数据库1.2 创建数据库用户 DEM1.3 使用DEM用户导入dem_init.sql 2 配置tomcat2.1 配置/tomcat/conf/server.xml2.2 修改jvm启动参数 3 配置JAVA 1.8及以上版本的运行时环境3.1 配置…...

aws亚马逊:什么是 Amazon EC2?

Amazon Elastic Compute Cloud&#xff08;Amazon EC2&#xff09;在 Amazon Web Services&#xff08;AWS&#xff09;云中按需提供可扩展的计算容量。使用 Amazon EC2 可以降低硬件成本&#xff0c;因此您可以更快地开发和部署应用程序。您可以使用 Amazon EC2 启动所需数量的…...

【BMC】jsnbd介绍

jsnbd介绍 本文主要介绍一个名为jsnbd的开源项目&#xff0c;位于GitHub - openbmc/jsnbd&#xff0c;它实现了一个前端&#xff08;包含HTML和JS文件&#xff09;页面&#xff0c;作为存储服务器&#xff0c;可以指定存储内容&#xff1b;还包含一个后端的代理&#xff0c;这…...

个推「数据驱动运营增长」上海专场:携程智行火车票分享OTA行业的智能用户运营实践

近日&#xff0c;以“数据增能&#xff0c;高效提升用户运营价值”为主题的个推「数据驱动运营增长」城市巡回沙龙上海专场圆满举行。携程智行火车票用户运营负责人王银笛分享OTA行业的智能用户运营实践。 ▲ 王银笛 携程智行火车票用户运营负责人 负责智行业务线用户运营。从0…...

Linux--gcc/g++

一、gcc/g是什么 gcc的全称是GNU Compiler Collection&#xff0c;它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器&#xff08;GNU C Compiler&#xff09;&#xff0c;现在除了c语言&#xff0c;还支持C、java、Pascal等语言。gcc支持多种硬件平台 二、gc…...

MySQL5.7源码编译安装

查看是否安装过mysql软件包 rpm -qa|grep mysql rpm -qa|grep mariadb rpm -e --nodeps mysql的软件包名建立mysql账号 useradd -s /sbin/nologin -M mysql安装依赖包 yum install -y gcc yum install -y gcc-c yum install -y ncurses yum install -y bison yum install -y…...

uniapp使用v-for页面不刷新解决办法

项目场景&#xff1a; 做一个项目&#xff0c;v-for循环数据库数据&#xff0c;使用uni-load-more&#xff0c;结果发现... DOM中的列表却没有更新 解决方案&#xff1a; 根据网上教程&#xff0c;加了一个触底函数onReachBottom&#xff0c;结果发现无论如何也更新不了DOM中…...

发布一款将APM日志转换为Excel的开源工具

这几年有不少朋友向我咨询如何将APM日志转换为Excel&#xff0c;我之前的答复是先将日志转换为MATLAB的格式&#xff0c;然后用MATLAB导出为Excel。但是实际上不是每个人都会用MATLAB&#xff0c;并且处理数据也不是非要用MATLAB&#xff0c;更不是说用MATLAB了就显得专业、显得…...

本地化小程序运营 同城小程序开发

时空的限制让本地化的线上平台成为一种追求&#xff0c;58及某团正式深挖人们城镇化、本地化的信息和商业需求而崛起的平台&#xff0c;将二者结合成本地化小程序&#xff0c;显然有着巨大的市场机会。本地化小程序运营可以结合本地化生活需求的一些信息&#xff0c;以及激发商…...

关于electron打包卡在winCodeSign下载问题

简单粗暴&#xff0c;直接上解决方案&#xff1a; 在你的项目根目录下创建一个.npmrc的文件&#xff0c;且在里面加上以下文本&#xff0c;不用在意这个镜像源是不是最新的&#xff0c;它会自己重定向到nodemirror这个域名里下载 ELECTRON_MIRRORhttps://npm.taobao.org/mirror…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

书籍“之“字形打印矩阵(8)0609

题目 给定一个矩阵matrix&#xff0c;按照"之"字形的方式打印这个矩阵&#xff0c;例如&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为&#xff1a;1&#xff0c;…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

归并排序:分治思想的高效排序

目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法&#xff0c;由约翰冯诺伊曼在1945年提出。其核心思想包括&#xff1a; 分割(Divide)&#xff1a;将待排序数组递归地分成两个子…...

k8s从入门到放弃之Pod的容器探针检测

k8s从入门到放弃之Pod的容器探针检测 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;容器探测是指kubelet对容器执行定期诊断的过程&#xff0c;以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...