Backend - Django URL 路由 & 重定向 & url编码解码

目录

[一、url 的 <> 作用](#一、url 的 <> 作用)

(一)操作流程

(二)前端设置链接

[1. 包括:](#1. 包括:)

[2. 比如](#2. 比如)

(三)后端匹配路由

[1. 理解](#1. 理解)

[2. 比如](#2. 比如)

[(三)后端视图的 get( )的参数](#(三)后端视图的 get( )的参数)

[1. 理解](#1. 理解)

[2. 比如](#2. 比如)

[二、路由重定向 HttpResponseRedirect](#二、路由重定向 HttpResponseRedirect)

(一)重定向到当前操作界面(刷新该界面)

(二)重定向到指定界面

(三)重定向时,带参数

[1. 指定跳转时](#1. 指定跳转时)

[2. 获取时](#2. 获取时)

三、重定向前,获取操作页面的路由

[四、URL编码与解码,即quote() & unquote()](#四、URL编码与解码,即quote() & unquote())

[(一)quote( ) 对路由url编码](#(一)quote( ) 对路由url编码)

[1. 写法](#1. 写法)

[2. 作用](#2. 作用)

[(二)unquote( ) 对路由url解码](#(二)unquote( ) 对路由url解码)

[1. 写法](#1. 写法)

[2. 作用](#2. 作用)


一、url 的 <> 作用

(一)操作流程

前端界面templates点击链接跳转 > url路由 > views的kwargs

(二)前端设置链接

1. 包括:

ajax的url值;select的option的value值;a标签的href值等

2. 比如

html 复制代码
<a href='/url_lang/zh-hans/luobogan'></a>

(三)后端匹配路由

python 复制代码
path('url_lang/<language>/<user>/', views_base.SetLang.as_view(), name='url_set_lang'),

1. 理解

其中,< > 包裹的内容理解成一个字典的key,key对应的value是前端链接设定的值。

2. 比如

'language' 的值对应 'zh-hans', 'user' 的值对应 'luobogan' 。

(三)后端视图的 get( )的参数

python 复制代码
class SetLang(View): 
        def get(self, request, *args, **kwargs):

1. 理解

其中,第四个参数 **kwargs 的字典内容,是路由url中获取的(第二点中有提到)。

2. 比如

kwargs 的值就是字典 {'language': 'zh-hans', 'user': 'luobogan'}

二、路由重定向 HttpResponseRedirect

(一)重定向到当前操作界面(刷新该界面)

python 复制代码
from urllib.parse import unquote

nexturl = request.META.get('HTTP_REFERER')
nexturl = nexturl and unquote(nexturl)
return HttpResponseRedirect(nexturl)

(二)重定向到指定界面

python 复制代码
return HttpResponseRedirect('/url_set_lang/')

(三)重定向时,带参数

1. 指定跳转时

python 复制代码
return HttpResponseRedirect('/url_set_lang/?user_id={}&book_id={}'.format('luobo', '数据结构'))

2. 获取时

python 复制代码
request.GET.get('user_id')

三、重定向前,获取操作页面的路由

python 复制代码
request.META.get('HTTP_REFERER')   # 针对Django

理解:

当页面A跳转到页面B时,若 http 请求头包含 referer 字段,则该字段值就是页面A的 url 。

注意:

由于不同浏览器的特点,HTTP_REFERER可能会不存在。即,若要使用HTTP_REFERER,需先检查是否存在。

四、URL编码与解码,即quote() & unquote()

(一)quote( ) 对路由url编码

1. 写法

python 复制代码
from urllib.parse import quote
quote('这是一个字符串')

2. 作用

避免中文乱码。

(二)unquote( ) 对路由url解码

1. 写法

python 复制代码
from urllib.parse import unquote
unquote(my_url)

2. 作用

unquote( )方法能把 URL编码形式的字串,解码成原来的字串。

相关推荐
LuckyTHP2 小时前
java 使用zxing生成条形码(可自定义文字位置、边框样式)
java·开发语言·python
热河暖男2 小时前
【实战解决方案】Spring Boot+Redisson构建高并发Excel导出服务,彻底解决系统阻塞难题
spring boot·后端·excel
mahuifa3 小时前
(7)python开发经验
python·qt·pyside6·开发经验
学地理的小胖砸5 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
安迪小宝5 小时前
6 任务路由与负载均衡
运维·python·celery
Blossom.1185 小时前
使用Python实现简单的人工智能聊天机器人
开发语言·人工智能·python·低代码·数据挖掘·机器人·云计算
lisw055 小时前
Python高级进阶:Vim与Vi使用指南
python·vim·excel
ayiya_Oese5 小时前
[模型部署] 3. 性能优化
人工智能·python·深度学习·神经网络·机器学习·性能优化
SoraLuna5 小时前
「Mac畅玩AIGC与多模态40」开发篇35 - 用 Python 开发服务对接 SearxNG 与本地知识库
python·macos·aigc
noravinsc6 小时前
redis是内存级缓存吗
后端·python·django