与request.POST.get()
相比,有没有更好的方法(最简单,最安全)从form.Form中创建的输入字段中检索数据?
出于练习目的,我有2页:
这是我的解决方案:
form.py:
class DataForm(forms.Form):
login = forms.CharField(label='login')
password = forms.CharField(widget=forms.PasswordInput)
def clean_data(self):
login = self.request.POST.get('login')
return login
views.py:
class MyTestView(FormView):
template_name = 'template.html'
form_class = DataForm
success_url = '/finaldestination/'
def form_valid(self,form):
form.clean_data()
return super().form_valid(form)
def testFunction(request):
print('Welcome here')
testprint()
form = DataForm(request.POST or None)
testFunction.login = request.POST.get('login')
testFunction.password = request.POST.get('password')
importedScript.login(testFunction.login, testFunction.password)
tested()
print(form.Login)
return render(request, 'finaldestination.html')
def tested():
x = testFunction.login
print(x, ', is a really cool guy')
template.html:
TEST:
<form action="/finaldestination/" method="post" name='btn'>
{% csrf_token %}
{{ form.login }}
{{ form.password }}
<input type="submit" value="Submit">
</form>
ImportedScript.bot
是用于登录Instagram的简单代码。
我的解决方案正在工作,但是我听说这不是检索数据的最安全方法。正如我在开始时所写的那样,它是出于练习目的,因为我仍然不了解如何使用用户输入的数据。
例如,我想创建一个贷款计算器,用户必须在其中放入大量数据(全部放在一页上),例如收入,出生日期,贷款期限等,然后将其输入与我的功能联系起来()
答案 0 :(得分:1)
您绝对应该完全不要这样做。由于某些原因,它是不安全的。
首先,表单的要点是调用其is_valid()
方法,然后通过cleaned_data
访问数据。
第二,永远不要在这样的请求之间存储数据。它对所有用户都是可见的;因此下一个转到tested
的用户将看到您发送的数据。通常,我建议使用会话在请求之间存储数据,但这不是正确的选择,因为您应该使用Django的内置身份验证框架。这样,您就可以通过request.user
访问登录用户。
最后,请注意,表单的clean_data
方法是没有意义的,将永远不会被调用。但是,再次使用该方法,您将访问self.cleaned_data
;那里没有self.request
这样的东西。