首页 > 解决方案 > Django - 有没有更好的方法从表单字段中获取数据?

问题描述

有没有更好的方法(最简单和最安全)从在 form.Form 中创建的输入字段中检索数据而不是request.POST.get()

出于练习目的,我有 2 页:

  1. 我输入一些数据
  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 的简单代码。我的解决方案正在运行,但我听说这不是检索数据的最安全方式。正如我在开头写的那样,这是出于练习目的,因为我仍然不明白如何使用用户输入的数据。

例如,我想创建一个贷款计算器,用户必须在其中输入大量数据(全部在一个页面上),如收入、出生日期、贷款期限等,然后如何将他的输入与我的函数连接()

标签: djangodjango-formsdjango-views

解决方案


你绝对绝对不应该这样做。它不安全有几个原因。

首先,表单的重点是调用它的is_valid()方法,然后通过cleaned_data.

其次,永远不要在这样的请求之间存储数据。它将对所有用户可见;所以下一个用户tested会看到你发送的数据。通常我会建议使用会话在请求之间存储数据,但这也不是正确的做法,因为您应该使用 Django 的内置身份验证框架;这样做将使您可以通过request.user.

最后,请注意表单的clean_data方法是没有意义的,永远不会被调用。但同样,在该方法中,您将访问self.cleaned_data; 不会有这样的东西self.request


推荐阅读