2013-01-11 1 views
8

Ho una tabella DB chiamata Articolo. Item ha un attributo status, che può essere sia diReindirizza nuovamente nel pallone

new 
todo 
doing 
done 

Sul mio sito ho due viste che mostrano le tabelle di cui al punto.

  • View 1 mostra tutti Articoli (con una colonna di stato).
  • Visualizza 2 solo mostra articoli con lo stato todo.

A seconda dello stato dell'elemento, ci sono alcune azioni che un utente può eseguire ("sposta a todo", "sposta a fare", "passa a fatto").

Se si considerano Visualizza 1 e 2, entrambi hanno in comune il fatto che contengono articoli con lo stato todo. Così su entrambi ho un collegamento pulsante a un URL chiamato

/Item/<id>/moveToDoing 

dove id - lo stato di voce è impostata su "fare".

Ora desidero reindirizzare l'utente a dove ha fatto clic sul pulsante (Visualizza 1 o Visualizza 2).

Le mie domande sono:

  1. come fare questo con la boccetta? Mi sento http://flask.pocoo.org/snippets/62/ non è proprio quello che mi serve, perché non ho nessuna richiesta POST con un formulare qui. (dovrei?)
  2. Sto facendo questo nel modo giusto o c'è una convenzione su come risolverlo normalmente?
+1

per la tua domanda, ma perché non progettare il vostro URL a '/ item//moveto/' ' – greatghoul

risposta

22

Sto utilizzando la funzione di supporto che è raccomandato qui: http://flask.pocoo.org/docs/reqcontext/

def redirect_url(default='index'): 
    return request.args.get('next') or \ 
      request.referrer or \ 
      url_for(default) 

utilizzarlo in nella vista

def some_view(): 
    # some action 
    return redirect(redirect_url()) 

senza parametri sarà reindirizzare l'utente di nuovo a dove è venuto da (request.referrer). È possibile aggiungere il parametro get next per specificare un URL. Questo è utile per oauth per esempio.

instagram.authorize(callback=url_for(".oauth_authorized", 
               next=redirect_url(), 
               _external=True)) 

Ho anche aggiunto una visualizzazione predefinita se non ci dovrebbe essere alcun referrer per qualche motivo

REDIRECT_URL ('another_view')

Il frammento si è collegato fondamentalmente fa la stessa cosa, ma più sicuro, garantendo non è possibile essere reindirizzati alla pagina di un utente malintenzionato su un altro host.

Non
+5

request.referrer' è quello che mi serviva per un semplice back-pulsante/link, grazie! –