Django-是否有更好的方法从表单字段获取数据?

时间:2018-09-02 12:00:59

标签: django django-forms django-views

request.POST.get()相比,有没有更好的方法(最简单,最安全)从form.Form中创建的输入字段中检索数据?

出于练习目的,我有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的简单代码。 我的解决方案正在工作,但是我听说这不是检索数据的最安全方法。正如我在开始时所写的那样,它是出于练习目的,因为我仍然不了解如何使用用户输入的数据。

例如,我想创建一个贷款计算器,用户必须在其中放入大量数据(全部放在一页上),例如收入,出生日期,贷款期限等,然后将其输入与我的功能联系起来()

1 个答案:

答案 0 :(得分:1)

您绝对应该完全不要这样做。由于某些原因,它是不安全的。

首先,表单的要点是调用其is_valid()方法,然后通过cleaned_data访问数据。

第二,永远不要在这样的请求之间存储数据。它对所有用户都是可见的;因此下一个转到tested的用户将看到您发送的数据。通常,我建议使用会话在请求之间存储数据,但这不是正确的选择,因为您应该使用Django的内置身份验证框架。这样,您就可以通过request.user访问登录用户。

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