Передача HTML переменной формы в python функцию в Django - PullRequest
1 голос
/ 20 февраля 2020

Я чрезвычайно новичок в Django, но я часами пытался найти решение. Я хочу передать переменную из формы html в бэкэнд, а затем использовать переменную там, чтобы сделать запрос API. Я хочу, чтобы результат API отображался в файле html, а также сверялся со списком (в бэкэнде) и имел результат сравнения с файлом html.

Я хотел бы, чтобы onClick отправил переменную на HTML (это электронное письмо), чтобы все работало без использования нескольких кнопок / формы.

Я полагаю, что у меня несколько ошибок.

Любая помощь приветствуется.

index. html

<body>
    <form action="#" method="post">
        {% csrf_token %}
        <input type="text" class="form-control" id="emailvalue" placeholder="" value=" "name="emailvalue">
        <input type="submit" value="Submit" onclick="location.href={% url 'script' %}"><hr>
        The Associated IP addresses are:
        {% for j in nonduplicate_list %}
            <li>{{j}}</li>
        {% endfor %}
        <hr>
        The unblocked IP addresses are:
        {% for i in unblocked_ip %}
            <li>{{i}}</li>
        {% endfor %}
    </form>
</body>

views.py

def get_ip(request):
    if request.method == 'POST':
        input_email = request.POST.get('emailvalue')
        three_days_ago = datetime.datetime.now() - datetime.timedelta(days = 30)
        time_in_format = three_days_ago.strftime('%Y-%m-%dT00:00:00.000Z')
        security_domain = 'https://security.com/api/v1/logs?' + 'q=' + input_email + '&since=' + str(time_in_format)
        print(security_domain)

        r = requests.get(security_domain)
        data = json.loads(r.content)
        data1 = str(data)

        ip_pattern = re.compile ('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
        ip_result = re.findall(ip_pattern, data1)
        nonduplicate_list = []
        for i in ip_result:
                if i not in nonduplicate_list:
                        nonduplicate_list.append(i)
        print(nonduplicate_list)

        threat_ip_list = ['1.1.1.1', '168.213.156.142', '2.2.2.2']
        unblocked_ip = []

        for i in threat_ip_list:
            if i in nonduplicate_list:
               unblocked_ip.append(i)
        print(unblocked_ip)

    return render(request, 'index.html', {'nonduplicate_list': nonduplicate_list, 'unblocked_ip': unblocked_ip})

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.button),
    path('output/', views.get_ip, name = 'script')
]

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Решение, которое я выбрал, состоит в том, чтобы разделить его на две разные функции: одну для формы и другую для кнопки. Я передал переменную формы html, используя request.session между двумя функциями.

0 голосов
/ 21 февраля 2020

Я не уверен, что понял идею, но хочу выпускать мою. вместо формы создайте группу кнопок, а затем присвойте каждому атрибут, например, data-url, data-data, data-target, ....

, затем используйте ajax, чтобы иметь возможность изменить цель doms html значение и данные во времени.

< script > 
     $("#ajax-caller").on('click', function (){
            var url = $(this).getattr('data-url');
            var data = $(this). getattr ('data-data');
            var target = $(this). getattr ("data-target");

            $.ajax({
                  url: url,
                  method: get,
                  data: data,

                  success: function (response){
                        target.html = response;
                         };
              )};
< / script>

Я плохо разбираюсь в js, поэтому поищите исправление js part:)

...