2016-05-06 4 views
0

Я создаю веб-сервис, чтобы люди могли искать в базе данных. Допустим, у меня есть пользователи и компании. Каждый пользователь и компания могут найти свой идентификатор. Поэтому, если вы ищете myurl/users/<id>, вы получаете информацию об этом пользователе, с другой стороны, если вы ищете компанию/вы получаете информацию об этой компании. Для этого я создал два простых ввода текста (один для пользователей и другой для компаний), где люди могут ввести <id>. Моя проблема в том, что когда я получаю значение от входного текста, я получаю это myrul/users?<id>, а не myurl/users/id. Я попытался сделать hardcode косой чертой, но затем получаю myrul/users/?<id>. Итак, мой вопрос заключается в том, как получить входной текст как URL-адрес, а не как переменную.получить форму ввода не как переменную, но как url ​​

Я использую флягу так что мой HTML имеет jinja2 код вроде этого:

<!-- USER id --> 
    <form method='GET' action={{url_for('get_info_by_id', type_collection='user')}}> 
     <input type="text" name="my_id"/><input type="submit" value="Go">       
    </form> 

<!-- COMPANY id--> 
    <form method='GET' action={{url_for('get_info_by_id', type_collection='company')}}> 
     <input type="text" name="my_id"/><input type="submit" value="Go">      
    </form> 

В моем питон скрипт (опоки)

@app.route('myurl/<type_collection>/<my_id>') 
get_info_by_id(type_collection,my_id): 
    # search into the database and return info about that id 
+2

Если yo u хотите, чтобы переменные формы размещались внутри URL-адреса, а не строка запроса или тело сообщения, вам нужно использовать JavaScript для захвата события отправки формы и перехода к новому URL-адресу. – dirn

+0

@dirn правильно, однако посмотрите на мой ответ, если вы просто пытаетесь получить форму для поиска в базе данных и возврата своих объектов. – dkhamrick

+0

Пойду через JavaScript, спасибо. – Dovi

ответ

1

Как @dirn предложил в комментарии, я сделал это через JavaScript, вот код, если кто-то другой также заинтересован:

HTML:

<!-- USER id --> 
<form method='GET' class="search" id="user" action=""> 
    <input type="text" name="my_id"/><input type="submit" value="Go"> 
</form> 

<!-- COMPANY id--> 
<form method='GET' class="search" id="company" action=""> 
    <input type="text" name="my_id"/><input type="submit" value="Go"> 
</form> 

JS:

$(".search").submit(function(event){ 
    event.preventDefault(); 
    var my_id = $(this).find(":input").val(); 
    url = 'myurl/'+ $(this).attr("id") + '/' + my_id; 
    window.location.href = url;  
}); 

python (колба)

@app.route('myurl/<type_collection>/<my_id>') 
get_info_by_id(type_collection,my_id): 
    # search into the database and return info about that id 
0

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

Отрегулируйте свой маршрут так:

@app.route('myurl/<type_collection>/') 
def findAllTheThings(): 
    if not request.form['my_id']: # Just check if a specific entity is chosen 
     return render_template('YourTemplateHere') # If no entity, then render form 
    entity_id = request.form['my_id'] 
    get_info_by_id(type_collection, entity_id): 
    # search into the database and return info about that id 

Теперь настройте шаблон следующим образом:

<!-- USER id --> 
<form method='GET' action={{url_for('findAllTheThings', type_collection='user')}}> 
    <input type="text" name="my_id"/><input type="submit" value="Go">       
</form> 

<!-- COMPANY id--> 
<form method='GET' action={{url_for('findAllTheThings', type_collection='company')}}> 
    <input type="text" name="my_id"/><input type="submit" value="Go">      
</form> 

Теперь, если не выбран ни один объект, вы просто визуализации формы. Вы можете бросить вспышку, чтобы сообщить им, что им нужно выбрать конкретный идентификатор или просто позволить им понять это. Если объект выбран, вы правильно назовете fucntion.

+0

спасибо, но мне нужно сделать это как URL, а не как переменную – Dovi