django - Django - 有没有更好的方法从表单字段中获取数据?
问题描述
有没有更好的方法(最简单和最安全)从在 form.Form 中创建的输入字段中检索数据而不是request.POST.get()
?
出于练习目的,我有 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 的简单代码。我的解决方案正在运行,但我听说这不是检索数据的最安全方式。正如我在开头写的那样,这是出于练习目的,因为我仍然不明白如何使用用户输入的数据。
例如,我想创建一个贷款计算器,用户必须在其中输入大量数据(全部在一个页面上),如收入、出生日期、贷款期限等,然后如何将他的输入与我的函数连接()
解决方案
你绝对绝对不应该这样做。它不安全有几个原因。
首先,表单的重点是调用它的is_valid()
方法,然后通过cleaned_data
.
其次,永远不要在这样的请求之间存储数据。它将对所有用户可见;所以下一个用户tested
会看到你发送的数据。通常我会建议使用会话在请求之间存储数据,但这也不是正确的做法,因为您应该使用 Django 的内置身份验证框架;这样做将使您可以通过request.user
.
最后,请注意表单的clean_data
方法是没有意义的,永远不会被调用。但同样,在该方法中,您将访问self.cleaned_data
; 不会有这样的东西self.request
。
推荐阅读
- swift - 更改分组的 UITableView 页脚 textLabel 颜色
- css - 在 CSS 中裁剪图像而不设置尺寸
- visual-studio-code - 如何更新 Visual Studio Code Portable?
- c - 逐字读取文件
- hadoop - SAP HANA Sqoop 导入
- javascript - 理解 this 关键字
- geoip - MaxMind GeoIP 城市状态精度
- scichart - SciChart TimeSpanAxis 不显示 VerticalLineAnnotation
- visual-studio-2017 - Azure ARM DSC - 安装 VS2017 远程调试器
- google-chrome-extension - 如何使用 chrome.webRequest API 更改 http 方法