gpt4 book ai didi

django - request.GET.get 在做什么?

转载 作者:行者123 更新时间:2023-12-04 21:56:10 27 4
gpt4 key购买 nike

我正在通过示例查看 A.Mele Django,第 1 章

def post_list(request, category=None):
object_list = Post.published.all()
paginator = Paginator(object_list, 3) # 3 posts in each page
page = request.GET.get('page')
try:
posts = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer deliver the first page
posts = paginator.page(1)
except EmptyPage:
# If page is out of range deliver last page of results
posts = paginator.page(paginator.num_pages)
return render(request, 'blog/post/list.html', {'page': page,
'posts': posts})

获取页面的这一行是我真的不明白。

page = request.GET.get('page')

Get 方法随请求发送用户信息。但是 get 实际上在做什么呢?这是 blog/post/list.html

{% extends "blog/base.html" %}

{% block title %}My blog{% endblock %}
{% block content %}

{% include "pagination.html" with page=posts %}

<h1>My Blog</h1>

{% for post in posts %}
<h2>
<a href="{{ post.get_absolute_url }}">{{ post.title }}</a>
</h2>
<p class="date">
Published {{ post.publish }} by {{ post.author }}
</p>
{{ post.body|truncatewords:30|linebreaks }}
{% endfor %}
{% endblock %}

最佳答案

您可以在 URL 中发送参数。例如:

https://www.example.com/some/path/foo.html?key1=val1&key2=val2

粗体部分包含两个参数:key1key2,取值为val1val2分别。

request.GET 解码这些参数并将其存储在 QueryDict 中。这基本上是某种字典(但一个键可以映射到多个值)。

因此,我们在这里寻找 ?page=1 参数,并通过 request.GET.get('page') 获得它。如果没有给出这样的参数,则返回None

我们可以将其用于分页,因为页面可以包含例如下一页和上一页的 URL,其中 ?page= 参数将递增或递减。

base.html 因此可能包含一些逻辑,在第二页上生成链接到 ?page=1?page=3 因此链接到 same URL,但具有不同的参数。 Django 然后解码这些参数,并相应地对查询集进行分页。

通常在 URL 中编码参数以防 URL 没有副作用(意味着数据库中没有重要的数据更改)。在 URL 中编码数据的优点是,例如,如果您将 URL 分享给 friend ,他/她将看到相同的分页(因此页面本身不会显示第一篇博文) .

这与用于登录或执行某些效果的 URL 形成对比:然后数据通常被编码在请求 header 中。因此,您不会将敏感数据分享给与您共享 URL 的人,并且第二次发出请求通常不会产生任何影响。

关于django - request.GET.get 在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51365788/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com