Django - 使用 request.GET 和 request.POST 之间的区别

标签 django post get django-forms request

从我读过的所有 HTML 书籍中,我知道在更改、添加或删除数据库以及处理密码等敏感信息时应该使用 POST。当您只想搜索数据库而不进行任何更改时,应该使用 GET。话虽如此,我正在阅读一本关于 Django 的书,到目前为止,为了处理表单,我们是这样做的:

def RegistrationFormView(request):
    form = RegistrationForm()
        if request.method == "POST": #if the user has clicked the 'submit' button on the form and is sending data
            form = RegistrationForm(request.POST)

这是有道理的。这本书继续教授如何创建一个搜索页面来搜索数据库。为此,我们使用 GET,这是有道理的。这是表格:
class SearchForm(forms.Form):
    query = forms.CharField(
    label='Enter a keyword to search for',
    widget=forms.TextInput(attrs={'size': 32})
)

但这是观点(这让我感到困惑):
def search_page(request):
    form = SearchForm()
    bookmarks = []
    show_results = False #Only show results if the user has searched something
    if request.GET.has_key('query'): #check if the user submitted GET data
        show_results = True #return results since the user has submitted GET data
        query = request.GET['query'].strip() 
        if query:
            form = SearchForm({'query' : query})

我想在这里澄清四件事。

1)如果我只是这样做会完全一样吗
if request.method == "GET":

代替
 if request.GET.has_key('query'):

2)在行
if request.GET.has_key('query'):

根据 Djangobook,它说“has_key 返回 True 或 False,指定 request.GET 或 request.POST 是否具有给定的键。”现在,究竟什么是“ key ”?键是表单中的一个字段,并且
if request.GET.has_key('query'):

检查用户是否填写了称为“查询”的 formField?

3) 当方法是 GET 时,我可以调用 form.is_valid() 吗?因为我在想的是在做什么
form = SearchForm(request.GET)
if form.is_valid():
    query = form.cleaned_data['query']

允许吗?

4)这本书为什么这样做
if query:


query = request.GET['query'].strip() 

?是不是线
if request.GET.has_key('query'):

已经验证“查询”字段是否已填写?

最佳答案

  • if request.method == "GET":绝不等同于 if request.GET.has_key('query'):
  • request.GETrequest.POST是字典子类和 has_key是内置词典界面的一部分 http://docs.python.org/2/library/stdtypes.html#dict.has_key但是它已被弃用,取而代之的是 'query' in request.GET .
  • 表单不关心请求方法或根本不关心请求。无论来源是什么,表单都会验证字典。
  • ?query=的情况下或 ?query=%20 key query将评估为 ''' '两者都是 False跑完后strip() . if request.GET.has_key('query'):只检查键是否存在,不查看值。
  • 关于Django - 使用 request.GET 和 request.POST 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21224713/

    相关文章:

    python - Ubuntu Python : unable to pip install dlib - Failed building wheel for dlib and machine is almost stuck

    jquery - 尝试通过 AJAX 提交时出现 %5Bobject%20Object%5D(未找到 404)

    http - 为什么本地主机上的 Julia 服务器挂起?

    javascript - 通过 GET 传递带有新行的文本字符串破坏了我的重定向

    javascript - 在 JavaScript 文件中使用 Django 模板标签

    Python:如何在处理其他异常的同时忽略异常

    python - 属性错误: 'NoneType' object has no attribute 'actions_with_auth_user_as_actor'

    ios - 来自 iOS 的 Restful post API

    c# - 通过 HttpClient.PostAsync 的 POST 请求,主体内有 StorageFile (WinRT)

    jquery - 在 MVC 4 中将多个参数传递给操作时,困惑是使用 GET 还是 POST