Desidero qualche funzione di ricerca nel mio sito web. Nella pagina di output, ottengo tutti i risultati in una singola pagina. Tuttavia, voglio distribuirlo su molte pagine (cioè 100 ricerche/pagina). Per questo, sto passando un numero di ricerche di default in "urlfor" ma non funziona. So che sto facendo un piccolo errore ma non lo sto prendendo.Gestione dei parametri dell'URL (Python Flask)
Ecco il mio codice qui sotto:
@app.route('/', methods=['GET', 'POST'])
def doSearch():
entries=None
error=None
if request.method=='POST':
if request.form['labelname']:
return redirect(url_for('show_results',results1='0-100', labelname=request.form['labelname']))
else:
error='Please enter any label to do search'
return render_template('index.html',entries=entries, error=error)
@app.route('/my_search/<labelname>')
def show_results(labelname=None, resultcount=None, results1=None):
if not session.get('user_id'):
flash('You need to log-in to do any search!')
return redirect(url_for('login'))
else:
time1=time()
if resultcount is None:
total_count=g.db.execute(query_builder_count(tablename='my_data',nametomatch=labelname, isextension=True)).fetchall()[0][0]
limit_factor=" limit %s ,%s"%(results1.split('-')[0],results1.split('-')[1])
nk1=g.db.execute(query_builder(tablename='my_data',nametomatch=labelname, isextension=True) + limit_factor)
time2=time()
entries=[]
maxx_count=None
for rows in nk1:
if maxx_count is None:
maxx_count=int(rows[0])
entries.append({"xmlname":rows[1],'xmlid':rows[2],"labeltext":rows[12]})
return render_template('output.html', labelname=labelname,entries=entries, resultcount=total_count, time1=time2-time1, current_output=len(entries))
qui voglio uscita sul URL del tipo "http://127.0.0.1:5000/my_search/assets?results1=0-100
" Inoltre, se posso modificare l'indirizzo URL nel browser come voglio la prossima 100 Risultato posso farlo "http://127.0.0.1:5000/my_search/assets?results1=100-100
"
Nota: qui sto usando sqlite come backend; quindi userò "limit_factor
" nelle mie query per limitare i miei risultati. E "query_builder
" e "query_builder_count
" sono semplici funzioni che generano query sql complesse.
ma l'errore che sto ottenendo è "NoneType" non può avere split. Si è fermato a "limit_factor"
.
Qui il fattore limite è solo un filtro che ho applicato; ma voglio applicare più filtri, ad esempio voglio cercare per la sua posizione "http://127.0.0.1:5000/my_search/assets?results1=0-100&location=asia
"
eccellente .. . sta funzionando.. . e sì hai ragione; lo sto rendendo vulnerabile all'iniezione SQL, sostituirò tutti loro; ma a partire da ora, sto usando regex per filtrare tutti gli input dell'utente !!! – namit