Django05_反向解析

2023-09-13 23:01:39

Django05_反向解析


5.1 反向解析概述

随着功能的不断扩展,路由层的 url 发生变化,就需要去更改对应的视图层和模板层的 url,非常麻烦,不便维护。这个时候我们可以通过反向解析,将 url解析成对应的 试图函数

通过 path或re_path 中 的name属性进行解析
反向解析一般用在模板中的超链接及视图中的重定向

在之前内容中,如果需要在后台中去获取某个url地址的话是需要我们自己进行设置的:

def login(request):
    # 获取get请求参数用这个
    # name = request.GET.get('name')
    # pwd = request.GET.get('pwd')
    # print(name, pwd)

    # 获取post请求参数用这个
    name = request.POST.get('name')
    pwd = request.POST.get('pwd')
    print(name, pwd)
    if name == '张三' and pwd == '1234':
        return redirect('/app01/index/')  # 重定向
    return render(request, 'login.html')

对于这部分重新跳转的代码: return redirect('/app01/index/') # 重定向,如果项目逐渐变大,那么这样就不太方便了(需要去记住很多的跳转路径,可能会出现了问题不好找到)
所以我们可以在一开始就为这些url起一个别名,在下次需要使用这个url的时候,可以直接使用这个变量名就可以了
image-20230729015500148

在路由分发的时候,加上一个name参数
可以在需要使用的时候直接通过name来使用这个url

例:我们需要在后端中来使用这个login_tz地址:

def login(request):
    name = request.POST.get('name')
    pwd = request.POST.get('pwd')
    print(name, pwd)
    if name == '张三' and pwd == '1234':
        # 在后端中反向解析 url 地址
        print(reverse('login_tz'))
        login_path = reverse('login_tz')
        # return redirect('/app01/index/')  # 重定向
        return redirect(login_path)  # 重定向
    return render(request, 'login.html')

image-20230729015546450
跳转成功
image-20230729015526158
例:在前端中去使用

<form action="{% url 'login' %}" method="post">
    ...
</form>

{% url 'login' %}是Django的模板标签,用于反向解析的固定写法,在之后会讲到

5.2 命名空间

如果我存在多个app子应用,那么可以不存在两个一样的url别名?

是可以的,比如:qq、微信等登陆

如果都需要使用login来进行命名,又是怎样来说区分出别名到底对应了哪一个app?

这里就需要用到命名空间,主要是配合url反向解析使用,多个不同的urls文件中配置同名的 name,
为了进行区分,给不同的urls进行不同的命名namespace(可以认为为app又起一个别名)
切记同一个项目下命名空间不能重复!

写法如下:

注意:

  1. 这里的写法include('app01.urls', 'app01')一定一定不要写错了
  2. include里面有一个元组,元组里面依此填内容
  3. 第1个参数'app01.urls'是app下面url地址
  4. 第2个参数'app01'就是我们为app01这个子应用起的别名(namespace)

!!需要注意在使用 include路由分发的时候,如果在子应用使用了反向解析,那么 include路由分发时写法如下:

image-20230731022943133

后端取值:

def login(request):
    name = request.POST.get('name')
    pwd = request.POST.get('pwd')
    print(name, pwd)
    if name == '张三' and pwd == '1234':

        print(reverse('app01:login_tz'))
        login_path = reverse('app01:login_tz')
        return redirect(login_path)  # 重定向
    return render(request, 'login.html')
  1. 有include的反向解析,需要加上app别名
  2. 格式:namesapce:name

前端取值(和后端一样):

<form action="{% url 'app01:login_tz' %}" method="post">
    ...
</form>

拓展——反向解析时包含正则匹配

如果在反向解析的时候,遇到的是含正则表达式的有分组匹配的
需要为你的reverse多传一个参数

# 无名分组用 args
print(reverse('login_tz', args=(12,)))

# 有名分组用 kwargs
print(reverse('login_tz', kwargs={'y': 112}))

在前端中,也是这样进行操作,不过不用区分无名分组与有名分组

<form action="{% url 'login_tz' 12 %}" method="post">
    ...
</form>
更多推荐

Redis的介绍,安装Redis的方式

🐌个人主页:🐌叶落闲庭💨我的专栏:💨c语言数据结构javaEE操作系统石可破也,而不可夺坚;丹可磨也,而不可夺赤。Redis初识Redis1.1认识Redis1.2安装Redis的方式1.2.1安装Redis依赖1.2.2上传安装包并解压1.2.3启动Redis1.2.3.1默认启动1.2.3.2指定配置启动1

自动化测试:yaml结合ddt实现数据驱动!

在python+unittest+selenium+ddt的框架中,数据驱动常见有以下几种方式实现:Csv/txtExcelYAML本文主要给大家介绍测试数据存储在YAML文件中的使用场景。首先先来简单介绍一下YAML。1.什么是YAML一种标记语言类似YAML,它实质上是一种通用的数据串行化格式,由于其可读性高,用来

安装配置 IDE

目录WebStormSublimeText3安装配置subl快捷命令(OSX)详细过程分解安装PackageControl安装配置主题常用插件Atom插件列表/PluginList推荐配置keymap.csonVisualStudioCode配置按键插件Cursor适合前端、后端、全栈工程师,尤其以Javascript

go-GMP和Scheduler

GPM模型G待执行的goroutine,结构定义在runtime.gM操作系统中的线程,它由操作系统的调度器进行调度和管理,结构定义在runtime.mP处理器,是GM的中间件,它通过一个队列绑定了GM,每个P都有一个局部queue,用来存放待执行的本地goroutineGGoroutine只存在于Go语言的运行时,它

xlnet+bilstm实现菜品正负评价分类

摘要CMU和googlebrain联手推出了bert的改进版xlnet。在这之前也有很多公司对bert进行了优化,包括百度、清华的知识图谱融合,微软在预训练阶段的多任务学习等等,但是这些优化并没有把bert致命缺点进行改进。xlnet作为bert的升级模型,主要在以下三个方面进行了优化采用AR模型替代AE模型,解决ma

Nodejs+vue热门游戏网游推荐网站系统 s5832

热门网游推荐网站综合网络空间开发设计要求。目的是将热门网游推荐将传统管理方式转换为在网上管理,完成热门网游推荐信息管理的方便快捷、安全性高、交易规范做了保障,目标明确。热门网游推荐网站可以将功能划分为管理员功能和用户功能。(1)、管理员关键功能包含系统首页、个人中心、用户管理、科普知识管理、游戏攻略管理、游戏信息管理、

spring和springmvc常用注解

1.Spring常用注解:1)@Repository将DAO类声明为Bean2)@Service用于修饰service层的组件3)@Controller通常作用在控制层,将在SpringMVC中使用4)@Component是一个泛化的概念,仅仅表示spring中的一个组件(Bean),可以作用在任何层次5)@Scope

flask项目请求与响应

项目名:static(静态)jscsstemplates(模板)app.py(运行)web项目mvc:model模型view视图controller控制器mtvmodel(模型)templates(模板)-->htmlview视图(python代码)起控制作用b/sbrowserserver浏览器服务器c/sclien

加密算法总结

数字签名、信息加密是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的签名加密算法来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。1、数字签名数字签名,简单来说就是通过提供可鉴别

工厂模式-(简单工厂模式)

首先看一下设计模式的六大原则设计模式的六大原则1、开闭原则(OpenClosePrinciple)开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体

服务器硬件监控解决方案,提升服务器稳定性

前言在当今数字化时代,服务器的稳定运行对于企业的核心业务至关重要。为了确保服务器的正常运行并及时发现潜在问题,我们公司开发了一款先进的服务器硬件监控解决方案。本文将深入探讨服务器硬件监控的重要性、解决方案的特点和优势,以及支持监控的硬件设备列表和服务器硬件指标一览。此外,我们还将介绍该解决方案提供的资产管理、自动巡检和

热文推荐