Джанго - есть ли лучший способ получить данные из поля формы? - PullRequest
0 голосов
/ 02 сентября 2018

Есть ли лучший способ (самый простой и безопасный) для извлечения данных из полей ввода, созданных в форме. Форма, чем request.POST.get()?

Для практических целей у меня есть 2 страницы:

  1. Я ввожу некоторые данные
  2. Я использую данные с 1-й страницы

это мое решение:

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 голосов
/ 02 сентября 2018

Вы абсолютно точно не должны делать ничего из этого. Это небезопасно по нескольким причинам.

Во-первых, смысл формы в том, что вы вызываете метод is_valid(), а затем получаете доступ к данным через cleaned_data.

Во-вторых, никогда не храните данные между такими запросами. Это будет видно всем пользователям; поэтому следующий пользователь, который перейдет на tested, увидит отправленные вами данные. Обычно я бы рекомендовал использовать сеанс для хранения данных между запросами, но это тоже не правильно, потому что вы должны использовать встроенную в Django структуру аутентификации; после этого вы получите доступ к вошедшему в систему пользователю через request.user.

Наконец, обратите внимание, что метод clean_data вашей формы не имеет смысла и никогда не будет вызываться. Но опять же, в рамках этого метода вы получите доступ к self.cleaned_data; там не было бы такой вещи, как self.request.

...