目录
[一、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编码形式的字串,解码成原来的字串。