从我读过的所有HTML书籍中,我知道在更改,添加或删除数据库以及处理敏感信息(如密码)时应使用POST。当您只想在不做任何更改的情况下搜索数据库时,应该使用GET。随着中说,我正在读一本关于Django和到现在为止,处理的形式,我们这样做是这样的:Django - 使用request.GET和请求之间的差异。POST
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.GET.has_key('query'):
根据Djangobook做
if request.method == "GET":
,而不是
if request.GET.has_key('query'):
2),它说“has_key返回True或False,指定request.GET或request.POST是否有给定的键。”现在,究竟是一个'钥匙'?是表单中的一个字段,并且
if request.GET.has_key('query'):
检查用户是否填写了名为'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'):
已经验证'查询'字段是否填写?
好的谢谢。对于问题#3,如果我做了“form = SearchForm(request.GET) if form.is_valid():”那么我不用做“如果request.GET.has_key('query'):”对不对?因为如果form.is_valid()是真的,那么这意味着那里definetely是一个'查询'键,因为这是窗体唯一的字段和form.is_valid检查,并确保'查询'在那里,对吗?根据你的答案#4,如果关键字query =''或query ='',即使它等于一个空字符串,它仍然存在吗?那么,为什么“如果查询:”评估为假,即使它仍然存在? – user2719875
是的,使用'is_valid'已经检查给出'query'参数并且它是一个非空值。然而,'query = request.GET ['query']。strip()'获得值an,然后删除前导和尾随空格。如果'query'只是空格,那么它仍然会被判断为'False'。真的这些检查应该都是形式而不是视图, –