use*_*875 5 django post get request django-forms
从我阅读过的所有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)
Run Code Online (Sandbox Code Playgroud)
这是有道理的。本书继续讲授如何创建一个搜索页面,以搜索数据库。为此,我们使用GET,这很有意义。形式如下:
class SearchForm(forms.Form):
query = forms.CharField(
label='Enter a keyword to search for',
widget=forms.TextInput(attrs={'size': 32})
)
Run Code Online (Sandbox Code Playgroud)
但这是视图(这就是使我困惑的地方):
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})
Run Code Online (Sandbox Code Playgroud)
我想在这里澄清四件事。
1)如果我刚做的话会完全一样吗
if request.method == "GET":
Run Code Online (Sandbox Code Playgroud)
代替
if request.GET.has_key('query'):
Run Code Online (Sandbox Code Playgroud)
2)在行
if request.GET.has_key('query'):
Run Code Online (Sandbox Code Playgroud)
根据Django的书,它说:“ has_key返回True或False,指定request.GET或request.POST是否具有给定密钥。” 现在,什么是“钥匙”?键是表单中的字段,并且
if request.GET.has_key('query'):
Run Code Online (Sandbox Code Playgroud)
检查用户是否已填写被称为“查询”的formField?
3)方法为GET时,我可以调用form.is_valid()吗?因为我当时在想
form = SearchForm(request.GET)
if form.is_valid():
query = form.cleaned_data['query']
Run Code Online (Sandbox Code Playgroud)
可以吗
4)这本书为什么要做
if query:
Run Code Online (Sandbox Code Playgroud)
后
query = request.GET['query'].strip()
Run Code Online (Sandbox Code Playgroud)
?不行
if request.GET.has_key('query'):
Run Code Online (Sandbox Code Playgroud)
已经验证“查询”字段是否已填写?
No.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关键query将评估为''和' 'which 都将False在运行后strip()。if request.GET.has_key('query'):只检查键是否存在而不查看值。
| 归档时间: |
|
| 查看次数: |
5975 次 |
| 最近记录: |