Хочу использовать и ДОБРАТЬСЯ и методы POST

Я знаю страницу результатов, которую ПОЛУЧАЕТ использование, метод может быть отмечен, в то время как один POST использования не может быть. Я также знаю об ограничениях ПОЛУЧИТЬ методов.

Теперь предположите, что я хочу создать поисковую систему, которые использованием по умолчанию ЗАСТАВЛЯЮТ пользователей разрешения отмечать, но когда длина поисковой фразы превышает предел, переключатель к POST. На стороне сервера я использую $ _GET или $ _POST, в зависимости от которого установлен.

Действительно ли это выполнимо?
Если не, почему?
Если да, обеспечьте краткую схему.

Спасибо

11
задан gameover 10 January 2010 в 11:41
поделиться

5 ответов

Не непроверено...

код:

def countSubStringMatchRecursive(target, key, count=0):
    #### index = find(target, key) # HUH?
    index = target.find(key)
    if index >= 0:
        count += 1
        target = target[index+len(key):]
        count = countSubStringMatchRecursive(target, key, count)
    return count

for test in ['', 'bar', 'foo', 'foofoo', 'foo foo foo fo']:
   print countSubStringMatchRecursive(test, 'foo'), test.count(key), repr(test)

вывод:

0 0 ''
0 0 'bar'
1 1 'foo'
2 2 'foofoo'
3 3 'foo foo foo fo'

Я предполагаю, что это просто развлечение или домашнее задание... рекурсивная функция должна быть медленнее соответствующего итеративного решения Python, которое естественно будет медленнее, чем использование target.count (key) ... так что я не беспокоился об устранении всех проблем, которые были у вашей версии... но прочитайте PEP-008:-)

Комментарии к строковому модулю

Вы прокомментировали, что не использовали в поиске импорта последовательностей . Какую версию Python вы используете? Какова дата последнего обновления книги или учебного пособия?

С момента запуска строкового модуля (он будет на компьютере как < каталог установки Python >/Lib/string.py ; Цитирую из версии 2.6):

"" "Коллекция строковых операций (большинство больше не используется).

Внимание: большая часть кода, который вы видите здесь, в настоящее время обычно не используется. Начиная с Python 1.6, многие из этих функций реализованы как в стандартном строковом объекте. Раньше они выполнялись встроенный модуль, называемый строп, но строп устарел сам по себе.

и т.д. "" "

и вот код этого файла для функции find (лишен комментариев):

def find(s, *args):
    return s.find(*args)

, поэтому использование string.find (цель, ключ) вместо target.find (ключ) является пустой тратой.

-121--2433166-

Вы можете либо свернуть свои собственные насмешки, как предложил Анураг Униял, либо использовать насмешливую структуру.

В ответ на эти слова вы можете просто создать обычного пользователя, как вы бы все равно в Джанго... Я бы предположил, что это поражает точку единичного теста. Единичный тест не должен касаться базы данных, но, создав пользователя, вы изменили базу данных, поэтому мы хотели бы издеваться над ней.

-121--913372-

Это выполнимо, без проблем.

Существует массив $ _ REQUEST , объединяющий значения GET, POST и COOKIE, но лучшим способом будет обработка GET и POST вручную в сценарии.

Просто проверьте механизм $ _ GET [«переменная»] и $ _ POST [«переменная»] и используйте все, что набор. Если переменная задана в обоих методах, необходимо определить, какой из них следует присвоить приоритет.

Единственное заметное различие между этими двумя методами заключается в том, что параметр GET имеет ограничения по размеру в зависимости от браузера и принимающего веб-сервера (POST также имеет ограничения, но они обычно находятся в диапазоне нескольких мегабайт). Я думаю, что общее правило состоит в том, что последовательность GET никогда не должна превышать 1024 символов.

13
ответ дан 3 December 2019 в 03:35
поделиться

Вот как вы могли бы использовать Get и опубликовать в одном:

<form action="myfile.php?var1=get1&amp;var2=get2&amp;var3=get3" method="post">

    <input type="hidden" name="var1" value="post1" />
    <input type="hidden" name="var2" value="post2" />

    <input type="submit" />
</form>

PHP:

print_r($_REQUEST);
// var1 = "post1"
// var2 = "post2"
// var3 = "get3"

print_r($_GET)
// var1 = "get1"
// var2 = "get2"
// var3 = "get3"

print_r($_POST);
// var1 = "post1"
// var2 = "post2"
10
ответ дан 3 December 2019 в 03:35
поделиться

Можно использовать что-то вроде:

<?php
function getParam($key)
{    
    switch (true) {
        case isset($_GET[$key]):
            return $_GET[$key];
        case isset($_POST[$key]):
            return $_POST[$key];
        case isset($_COOKIE[$key]):
            return $_COOKIE[$key];
        case isset($_SERVER[$key]):
            return $_SERVER[$key];
        case isset($_ENV[$key]):
            return $_ENV[$key];
        default:
            return null;
    }    
} 
1
ответ дан 3 December 2019 в 03:35
поделиться

Да, его выполняемые, хотя (ИМХО) предел, при котором становится громоздким, значительно больше порогового значения, на котором пользовательский интерфейс для предоставления этой большой информации становится непригодным для использования. Кроме того, тем более сложным запросом вы отправляете в обычную поисковую систему, тем эффективнее она может быть решена.

Но я предполагаю, что у вас есть свои причины.

Самый простой способ, от предоставленной вами информации, чтобы добиться этого, будет изменять метод формы во время выполнения от доступа к публикации с использованием JavaScript, например.

<form method='GET' id='searchform' target='search.php' onsubmit='
  if (document.getElementById("searchdata")) {
    if ((document.getElementById("searchdata").length >$some_threshold) 
         && (document.getElementById("searchform"))) { 
         // 2nd if in case this moved to action for button 
         document.getElementById("searchform").method="POST";
     }
   }
 return true;'>
 <textarea name='searchdata' id='searchdata'>
 </textarea>
 <input type='submit' value='go get it'>
</form>

, Который также приятно понижен для клиентов без JavaScript.

c.

1
ответ дан 3 December 2019 в 03:35
поделиться

Также также так хорошо осознавать, что используя Get Открывает искушение между определенными наборами пользователям, чтобы манипулировать URL-адресом, чтобы «увидеть, что произойдет», поэтому абсолютно необходимо убедиться, что ваш код соответствует санаде входных переменных.

Конечно, вы это делаете все равно ;-). Но с получением платит вдвойне параноик.

Я сам, если я использую, я, как правило, тоже настрою файл cookie и отбросить идентификатор какой-то в нем, а затем поперечно коррелируйте, что в переменную в списке Get, просто чтобы убедиться, что это абсолютно никаких проблем Пользователь а манипулирование входу и позволит им увидеть что-либо, происходящее с пользователем B.

1
ответ дан 3 December 2019 в 03:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: