从我读过的所有 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.GET
和 request.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/