2014-01-24 8 views
10

Ich habe eine JSON-API in einem Blueprint-Modul und ein Web-Frontend in einem anderen.Wie rufe ich eine Flask-Ansicht von einem anderen an?

Ich möchte einige AJAX-Anforderungen abschneiden, die der Client-JS-Code vornehmen müsste, indem er einige JSON-Elemente in die Frontend-Ansichtsvorlage einbaut, bevor er sie an den Client like in this gist I found sendet.

Wie rufe ich eine Flask-Ansicht aus einer anderen Flask-Ansicht?

Ich hätte die View-Funktion direkt aufrufen können, aber request würde der "äußeren" Anfrage entsprechen, und das verwirrt die aufgerufene API-Funktion. Ich habe versucht using test_request_context und es funktioniert fast, aber ich kann nicht herausfinden, wie man die Authentifizierung (ich benutze Flask-Login).

+2

Ich würde die Logik nehmen, die Sie verwenden, um die Daten aus der AJAX-aufgerufenen Ansicht abzurufen und in eine andere Funktion zu versetzen. Diese Funktion sollte nicht auf Authentifizierung basieren. Rufen Sie dann diese Funktion in beiden Ansichten auf. –

+0

@Mark: Das hätte ich normalerweise getan, aber die JSON-Funktionen beruhen auf dem 'request'-Objekt zum Generieren von Paginierungs-URLs und einigen anderen Dingen. Ich möchte sie nicht alle umschreiben, um explizit "endpoint", "request.args" usw. zu übergeben. Ich brauche auch * diese Paginierungsinformation im generierten JSON, damit der Client weiß, wie er die nächste Seite holt. Ich stimme zu, es ist nicht die eleganteste Lösung, aber es funktioniert am besten für mich. –

Antwort

16

Sie können eine Flask test client für diesen Einsatz:

client = app.test_client() 
response = client.get('/your/url', headers=list(request.headers)) 

die Authentifizierung mit Flask-Anmeldung Damit Sie müssen Ihre Anfrage-Header zu übergeben.

Dank Chris McKinnel für answering a related question.

+0

arbeitete wie ein Charme! Sie können auch 'from flask import current_app' verwenden und current_app.test_client() verwenden – deeshank

Verwandte Themen