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

目录

一、url 的 <> 作用

(一)操作流程

(二)前端设置链接

1. 包括:

2. 比如

(三)后端匹配路由

1. 理解

2. 比如

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

1. 理解

2. 比如

二、<a href=”....“>的URL前后缀有“/"和无“/"的区别

(一)前缀

(二)后缀

三、render 和 redirect 的区别

(一)render

(二)redirect 重定向

(三)两者联系

四、路由重定向 HttpResponseRedirect

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

(二)重定向到指定界面

(三)重定向时,带参数

1. 指定跳转时

2. 获取时

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

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

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

1. 写法

2. 作用

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

1. 写法

2. 作用


一、url 的 <> 作用

(一)操作流程

        前端界面templates提交数据(或浏览器输入链接刷新界面,或点击画面链接跳转)>  url路由  >  views的kwargs

(二)前端设置链接

1. 包括:

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

2. 比如

<a href='/url_lang/zh-hans/luobogan'></a>

(三)后端匹配路由

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( )的参数

class SetLang(View): 
        def get(self, request, *args, **kwargs):

1. 理解

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

2. 比如

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

二、<a href=”....“>的URL前后缀有“/"和无“/"的区别

(一)前缀

在拼接路由时,若设定拼接的半部分以斜杠“/"开头,则浏览器会自动获取前半部分的主机和端口作为的前半部分来拼接。

若不以斜杠“/"开头,则会获取整个前半部分作为最终拼接的前半部分。

(二)后缀

在请求路由时,若整个url的后缀不加“/",点击跳转时,会向服务器请求2次。

若整个url的后缀url加上“/",只向服务器请求1次。

所以,建议最好加上“/",如果不加,一旦同一时间数量过多,会导致服务器负载过大。除非结尾处是文件名则不加“/",如“../home.html”,否则路由都最好加上“/”的后缀。

三、render 和 redirect 的区别

(一)render

        可以将模板语信息参数传递至下一页面。

(二)redirect 重定向

        页面会全部刷新,无法将参数传递至下一页面。

(三)两者联系

        都属于get()的协议里,前者是能把template的东西一并传过去,后者只是重定向到新页面。

四、路由重定向 HttpResponseRedirect

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

from urllib.parse import unquote

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

(二)重定向到指定界面

return HttpResponseRedirect('/url_set_lang/')

(三)重定向时,带参数

1. 指定跳转时

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

2. 获取时

request.GET.get('user_id')

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

request.META.get('HTTP_REFERER')   # 针对Django

理解:

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

注意:

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

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

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

1. 写法

from urllib.parse import quote
quote('这是一个字符串')

2. 作用

        避免中文乱码。

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

1. 写法

from urllib.parse import unquote
unquote(my_url)

2. 作用

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

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值