2016-07-04 11 views
0

Ich habe eine Flask-Ansicht, die request.args verwendet, um einige Abfrageargumente aus der Anforderung abzurufen. Ich möchte es als eine Funktion außerhalb einer Anfrage nennen, so request.args wird nicht verfügbar sein. Wie kann ich die Ansichtsfunktion ändern, um unabhängig zu arbeiten?Verwenden Sie die Fläschchenansicht, die Abfrageargumente außerhalb der Anforderung benötigt

http://localhost:5000/version/perms?arg1=value1&arg2=value2 
@app.route(version + 'perms', methods=['GET']) 
def get_perms(): 
    arg1 = request.args.get('arg1') 
    arg2 = request.args.get('arg2') 

Ich möchte diese Funktion als eine grundlegende Python-Funktion verwenden, ist es die Argumente im Aufruf übergeben.

def get_perm(arg1, arg2): 

Antwort

2

Es gibt Unterstützung URL Teile in Python Variablen zu bekommen, aber AFAIK nicht mit Abfrageparametern funktioniert, müssen Sie request.args dafür verwenden.

from flask import request 
@app.route(version + 'perms', methods=['GET']) 
def get_perm(): 
    arg1 = request.args.get('arg1') 
    arg2 = request.args.get('arg2') 

Wenn das, was Sie extrahieren möchten ist keine Abfrageparameter (dh es ist nicht nach dem in der URL?), So etwas wie dies funktionieren würde (direkt aus der Flasche Dokumentation kopiert - http://flask.pocoo.org/docs/0.11/quickstart/#routing)

@app.route('/post/<int:post_id>') 
def show_post(post_id): 
    # show the post with the given id, the id is an integer 
    return 'Post %d' % post_id 

Ich bin mir nicht sicher, was Sie mit "Aufruf ohne Webpart" meinen - möchten Sie es aus anderen Python-Code aufrufen, z aus einem Batch-Job? Ich glaube, ich würde so etwas tun:

from flask import request 
@app.route(version + 'perms', methods=['GET']) 
def get_perm_ws(): 
    arg1 = request.args.get('arg1') 
    arg2 = request.args.get('arg2') 
    return get_perm(arg1, arg2) 

def get_perm(arg1, arg2): 
    pass # your implementation here 

Eine weitere Alternative (wenn Sie nicht die Anforderungsparameter irgendwo sonst in der URL setzen können) wäre ein Funktionsparameter mit Standardwert sein. Beachten Sie, dass Sie hier etwas Unveränderliches verwenden sollten oder dass Sie nach Problemen fragen (ein veränderbares Standardargument kann geändert werden, und der geänderte Wert wird ab diesem Zeitpunkt als Standard verwendet).

@app.route(version + 'perms', methods=['GET']) 
def get_perm(params = None): 
    if params == None: 
     params = request.params 
    # your code here 
+0

Ja, ich möchte diese Funktion von einem anderen Python-Code aufrufen. Ja, ich kannte schon request.args.get(). Ja der letzte Punkt sollte mir helfen, danke für die Hilfe! Ich hätte darüber nachdenken sollen:/ –

+0

Tatsächlich verwalte ich den Fall bereits, wenn meine Parameter null (None) sind. In diesen Fällen verwende ich einen Standardwert :) –

+0

Entschuldigung für die Verwirrung der Kommentare, ich konnte den Python-Code nicht in die Kommentare einfügen, also habe ich ihn an meine Antwort angehängt –

Verwandte Themen