Django开发_12_URL反向解析、重定向

一、基本概念

反向解析是为了简便步骤,使代码更具可读性更优雅,重定向是防止重复提交相同数据造成资源浪费,甚至防御漏洞。

(一)URL正向解析

有客户端的浏览器发起一个url请求,Django根据URL解析,把url中的参数捕获,调用相应的试图,获取相应的数据,然后返回给客户端显示。

根据用户/浏览器发起的URL请求,它调用正确的Django视图,并从URL中提取它的参数需要的值。

(二)URL反向解析

通过一个视图的名字,再加上一些参数和值,逆向获取相应的URL。
根据Django视图中的标识和将要传递给它的参数的值,获取与之关联的URL。

(三)转发

将客户端发送的请求在服务器内部转发传递,浏览器的URL地址不变

(四)重定向

防止客户端向服务器重复提交相同请求,浏览器的URL地址改变实现客户端跳转

1.HttpResponseRedirect('重定向的URL')

2.redirect()+reverse()

二、设置第一部分URL

(一)主路由设置命名空间

主路由urls.py文件中设置第一部分URL,namespace设置的就是命名空间

path("url/", include("url_app.urls",namespace="url")),

(二)子路由设置app_name

在子路由urls.py文件上端设置app_name,app_name设置的名字要与主路由命名空间设置名字保持一致

app_name = "url"

三、设置第二部分URL

在子路由urls.py文件设置路径时,添加name属性,对应的是下一步在html文件中的第二部分URL

path("view/", get_reverse, name="view"),

四、html文件中设置URL

在templates下的html文件中,在a标签内传递一个href(或者其他可传递url地址的位置,如form表单等)

模板:"{% url '第一部分URL:第二部分URL' %}"

不传参的反向解析:不传参的反向解析
传参的反向解析:传参的反向解析

五、view.py文件中编写视图函数

return redirect(reverse("第一部分URL:第二部分URL",args=(fruit,sport)))

args传递元组形式,kwargs传递字典形式

def get_reverse(request):    #因为下面重定向到别的路径、调用别的函数,所以这里不需要设置参数
    fruit = "banana"
    sport = "basketball"
    # return redirect(reverse("url:show",args=(fruit,sport)))
    return redirect(reverse("url:show", kwargs={"fruit": fruit, "sport": sport}))

你可能感兴趣的:(#,Django开发,django,python,后端)