DjangoURL调度器(二)

一、默认值与额外参数

image-20220927215649998

1.1、默认值

1.1.1、urls.py
from django.urls import pathfrom . import viewsurlpatterns = [# http://127.0.0.1:8000/polls/blog/ 等同于         # http://127.0.0.1:8000/polls/blog/1/path('blog/', views.page),# http://127.0.0.1:8000/polls/blog/1/# http://127.0.0.1:8000/polls/blog/10/# http://127.0.0.1:8000/polls/blog/99/path('blog/<int:num>/', views.page),
]
1.1.2、views.py
def page(request, num=1):# 编写对应的业务逻辑

1.2、额外的参数

1.2.1、urls.py
from django.urls import path
from . import viewsurlpatterns = [# 会传递给 views.path('blog/<int:year>/', views.year_archive, {'foo': 'bar'}),
]
1.2.2、views.py
def year_archive(request, year=2005, foo='bar')# 编写对应的业务逻辑

二、错误处理

image-20220927222118733

  • handler400- 状态码400
  • handler403- 状态码403
  • handler404- 状态码404
  • handler500- 状态码500
  1. 在 settings中修改配置:

    DEBUG = FalseALLOWED_HOSTS = ['*']
    
  2. 在主应用的urls中配置:

    # polls是子应用
    handler404 = "polls.views.page_not_found"
    
  3. 在polls应用的views中添加函数page_not_found:

    def page_not_found(request, exception):return HttpResponse('自定义的404错误页面')
    
  4. 浏览器测试访问,找不到匹配的路由

    image-20210705154513931

三、引用其他URL调度器

image-20220927222647740

3.1、include(str)

from django.urls import include, pathurlpatterns = [path('community/', include('aggregator.urls')),path('contact/', include('contact.urls')),
]

3.2、include(list/tuple)

from django.urls import include, pathfrom apps.main import views as main_views
from credit import views as credit_viewsextra_patterns = [path('reports/', credit_views.report),path('reports/<int:id>/', credit_views.report),path('charge/', credit_views.charge),
]urlpatterns = [path('', main_views.homepage),path('help/', include('apps.help.urls')),path('credit/', include(extra_patterns)),
]

3.3、技巧

优化繁琐的URL地址编写

from django.urls import path
from . import viewsurlpatterns = [path('<page_slug>-<page_id>/history/', views.history),path('<page_slug>-<page_id>/edit/', views.edit),path('<page_slug>-<page_id>/discuss/', views.discuss),path('<page_slug>-<page_id>/permissions/', views.permissions),
]

优化

from django.urls import include, path
from . import viewsurlpatterns = [path('<page_slug>-<page_id>/', include([path('history/', views.history),path('edit/', views.edit),path('discuss/', views.discuss),path('permissions/', views.permissions),])),
]

四、URL反向解析

image-20220927223947184

url调度器除了从用户发起请求,到匹配对应的view,还能在python程序中调用进行匹配,通过 path或re_path 中 的name属性进行解析

  • 在模板中,使用url模板标签

  • 在Python代码中(主要是views),使用 reverse() 函数

4.1、示例

urls中配置

from django.urls import pathfrom . import viewsurlpatterns = [#...path('articles/<int:year>/', views.year_archive, name='news-year-archive'),#...
]

4.2、在模板中测试

  • views.py跳转到页面
def do_html(request):return render(request,'redirect_test.html')def year_archive(request,year):return HttpResponse(f'重定向成功{year}')
  • 模板中代码
    # 模板中:
    <a href="{% url 'news-year-archive' 2030 %}">2030 Archive</a>
    

    4.3、在python代码测试

    from django.urls import reverse
    from django.http import HttpResponseRedirectdef redirect_to_year(request):return HttpResponseRedirect(reverse('news-year-archive', args=(2030,)))
    

    五、命名空间

    image-20220928184222965

    命名空间主要用于配合url反向解析使用,多个不同的urls文件中可能配置同名的 name,那么为了进行区分,给不同的urls进行不同的命名

    注意

    同一个项目下命名空间不能重复,切记!

    5.1、命名空间基本使用

    通过在 url调度器的模块中,定义 app_name = 'polls' 来命名

    from django.urls import path
    from . import views# 定义,一般命名空间和子应用名相同,便于记忆
    app_name = 'polls'
    urlpatterns = [path('', views.index_view, name='index'),path('<int:pk>/', views.detail_view, name='detail'),...
    ]
    # 调用,一旦有了命名空间,调用时就必须使用 polls: 前缀
    reverse('polls:index')
    

    5.2、命名空间嵌套

    # 在 urls 中配置如下:
    from django.urls import path
    from . import views# 定义命名空间,一般命名空间名和子应用名相同,便于记忆
    app_name = 'polls'
    extra_patterns = ([path('app_name/', views.app_name, name='app_name'),],# 此处就是嵌套的命名空间'extra'
    )
    urlpatterns = [path('', views.index_view, name='index'),path('<int:pk>/', views.detail_view, name='detail'),path('extra/', include(extra_patterns)),...
    ]
    # 在模板中使用:
    <a href="{% url 'polls:extra:app_name' %}">点击链接</a>
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/249134.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BSV区块链将凭借Teranode的创新在2024年大放异彩

​​发表时间&#xff1a;2024年1月15日 2024年1月15日&#xff0c;瑞士楚格 – BSV区块链协会研发团队今日官宣了Teranode的突破性功能&#xff0c;这些功能将显著提升BSV区块链网络的效率和速度。在不久的将来&#xff0c;BSV区块链的交易处理能力将达到每秒100万笔交易。 T…

怎么备份ESXi虚拟机?

ESXI备份虚拟机与快照的区别是什么&#xff1f; 关于虚拟机备份的一个常见误解是它与虚拟机快照有何不同以及它们是否可以相互替代&#xff1f;为了回答这个问题&#xff0c;让我们仔细看看这两个概念&#xff1a; VM虚拟机快照&#xff1a;快照&#xff08;或Hyper-V 的检查…

神经网络的一些常规概念

epoch&#xff1a;是指所有样本数据在神经网络训练一次&#xff08;单次epoch(全部训练样本/batchsize)/iteration1&#xff09;或者&#xff08;1个epochiteration数 batchsize数&#xff09; batch-size&#xff1a;顾名思义就是批次大小&#xff0c;也就是一次训练选取的样…

网络安全03---Nginx 解析漏洞复现

目录 一、准备环境 二、实验开始 2.1上传压缩包并解压 2.2进入目录&#xff0c;开始制作镜像 2.3可能会受之前环境影响&#xff0c;删除即可 ​编辑 2.4制作成功结果 2.5我们的环境一个nginx一个php 2.6访问漏洞 2.7漏洞触发结果 2.8上传代码不存在漏洞 2.9补充&#…

Log4j2-29-log4j2 discard policy 极端情况下的丢弃策略 同步+异步配置的例子

Log4j2异步日志、同步日志和混合日志的配置详解 Log4j 2中记录日志的方式有同步日志和异步日志两种方式&#xff0c;其中异步日志又可分为使用AsyncAppender和使用AsyncLogger两种方式。 异步日志(性能最好&#xff0c;推荐使用) 异步日志情况下&#xff0c;增加 Disruptor …

深入浅出HBase:一文理解HBase基础概念(列存储、时间戳、key-value)、架构特点以及适合的使用场景

文章目录 一. HBase 数据模型1. 行存储与列式存储1.1. 行存储1.2. 列存储 2. HBase 数据模型2.1. 模型概览2.2. 列与列族2.3. 时间戳&#xff1a;定义数据版本2.4. HBase的Key-Value 三. HBase架构1. HBase读写流程简述2. HRegionServer内部内部数据流转&#xff1a;HRegion &l…

Web性能优化之如何评估网页性能——性能指标和度量工具介绍

前言 用户在访问 web 网页时&#xff0c;大部分都希望网页能够在一秒完成。事实上&#xff0c;加载时间每多 1 秒&#xff0c;就会流失 7%的用户。如果时间超过 8s 用户就会感到不耐烦、会放弃访问。这也就是著名的 “8秒原则”。 虽然当今设备及网络环境都大幅提升&#xff…

【Spark系列3】RDD源码解析实战

本文主要讲 1、什么是RDD 2、RDD是如何从数据中构建 一、什么是RDD&#xff1f; RDD&#xff1a;弹性分布式数据集&#xff0c;Resillient Distributed Dataset的缩写。 个人理解&#xff1a;RDD是一个容错的、并行的数据结构&#xff0c;可以让用户显式的将数据存储到磁盘…

DVI接口如何连接HDMI接口显示器?DVI转HDMI转换器DHA

DVI转HDMI转换器DHA简介 DVI转HDMI转换器DHA能够将DVI信号和R/L音频信号输入转换成HDMI信号输出,独特的功能使其顺畅地整合到家庭影院中&#xff0c;并且播放出高品质的图像。主要用于数据监控中心、大型会议展示中心、学校及各个公司 DVI转HDMI转换器DHA特点 01.支持分辨率4K…

【TCP】三次握手(建立连接)

前言 在网络通信的世界里&#xff0c;可靠传输协议&#xff08;TCP&#xff09;扮演着重要的角色&#xff0c;它保证了数据包能够按顺序、完整地从发送端传送到接收端。TCP协议中有一个至关重要的机制——三次握手。这一过程确保了两个TCP设备在开始数据传输之前建立起一个稳定…

内衣洗衣机有必要买吗?最好用的迷你洗衣机推荐

随着内衣洗衣机的流行&#xff0c;很多小伙伴在纠结该不该入手一款内衣洗衣机&#xff0c;专门来洗一些贴身衣物&#xff0c;答案是非常有必要的&#xff0c;因为我们现在市面上的大型洗衣机只能做清洁&#xff0c;无法对我们的贴身衣物进行一个高强度的清洁&#xff0c;而小小…

手写分布式存储系统v0.1版本

引言 这是手写分布式存储系统v0.1版本&#xff0c;只有一个目标就是支持通过tcp接收数据并落地到磁盘文件(单机模式)&#xff0c;那接下来就开始吧 设计 实现一个系统&#xff0c;设计是最过瘾的过程没有之一&#xff0c;类似你搭积木前在脑海设计构建一副大致的“雏形”&am…

力扣hot100 最小路径和 多维DP 滚动数组 一题多解

Problem: 64. 最小路径和 文章目录 思路&#x1f496; 朴素版&#x1f496; 空间优化版 思路 &#x1f468;‍&#x1f3eb; 路飞 &#x1f496; 朴素版 ⏰ 时间复杂度: O ( n m ) O(nm) O(nm) &#x1f30e; 空间复杂度: O ( n m ) O(nm) O(nm) class Solution {public …

查看Windows 所有账户方法

目标 了解Windows查看所有账户的方法 方法 方法1&#xff1a;本地和用户组 按下Win X键&#xff0c;选择“计算机管理”。在计算机管理界面的左侧面板中&#xff0c;展开“系统工具” -> “本地用户和组” -> “用户”。在右侧窗口中&#xff0c;查看列出的所有用户账…

数据结构+算法(第01篇):走下神坛吧!算法

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

科技云报道:新趋势下,国产数据库或“春山可望”

科技云报道原创。 从540亿元到1286亿元——这是中国通信标准化协会大数据技术标准推进委员会针对中国数据库行业给出的一份预测报告。 报告指出&#xff0c;未来五年&#xff0c;中国数据库行业将从百亿级市场跨越成为千亿级市场。 最近两年&#xff0c;中国的数据库行业似乎…

Docker核心教程

1. 概述 官网&#xff1a;https://docs.docker.com/ Docker Hub 网站&#xff1a;https://hub.docker.com/ 容器较为官方的解释&#xff1a; 一句话概括容器&#xff1a;容器就是将软件打包成标准化单元&#xff0c;以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立…

leetcode—跳跃游戏—贪心算法

1 跳跃游戏1 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&a…

Codeforces Round 922 (Div. 2)补题

Brick Wall&#xff08;Problem - A - Codeforces&#xff09; 题目大意&#xff1a;规定砖的大小为1*k&#xff08;k>2&#xff09;,现在有一面n*m的砖墙&#xff0c;n是墙高&#xff0c;m是墙宽&#xff0c;砖在砖墙中有两种放法&#xff0c;水平放置和竖直放置&#xff…

注册亚马逊店铺用动态IP可以吗?

注册亚马逊店铺可以用动态IP&#xff0c;只要是独立且干净的网线就没问题&#xff0c;亚马逊规则要求一个IP地址只能出现一个亚马逊店铺&#xff0c;若使用不当会导致关联账户。 固定ip可以给我们的账户带来更多的安全&#xff0c;要知道关联问题是亚马逊上的一个大问题&#…