1

In meinem Projekt versuche ich eine URL (die in demselben Projekt läuft) aus meiner Sicht zu treffen.Alternative von Anfragen in Django

so auf einfachste Weise kann ich hier erklären.

@login_required 
def my_api_view(request): 
    if requests.method == 'GET': 
     # do stuff 
     return JsonResponse() 

# and its url is `/api/get-info/` 

eine andere Ansicht, die

oben api raubend ist
@login_required 
def show_info(request): 
    url = get_base_url + /api/get-info/ # http://localhost:8000/api/get-info/ 
    r = requests.get(url) 

    return HttpResponse(r.json()) 

Jetzt muss ich derselben Sitzung verwenden (Anmeldung erforderlich) so, wenn ich die URL getroffen requests benutze es, dass Benutzer beschwert ist eingeloggt hat nicht die offensichtlich ist richtig.

Wie kann ich das elegant und effizient machen? Sitzungsnutzung des angemeldeten Benutzers. (Ich möchte nicht die Ansicht als Funktion aufzurufen, ich möchte die api-URL Endpunkt schlagen und zu konsumieren

PS:. Wir etwas Ähnliches in django-Test haben self.client.get(...)

+2

Warum versuchen Sie, HTTP zu verwenden, anstatt nur die andere Ansichtsfunktion direkt aufzurufen? Oder noch besser, warum sollte man die Logik nicht in eine separate Funktion/Methode/was auch immer von beiden Ansichten genannt werden? – koniiiik

Antwort

2

Rufen Sie einfach, dass View-Funktion und Pass das request Objekt als Parameter zu.

@login_required 
def show_info(request): 
    r = my_api_view(request) 
    return HttpResponse(r.json()) 

Oder eine bessere Option wäre, einfach die Logik in eine separate Funktion zu trennen, wie @koniiiik in den Kommentaren erwähnt.

EDIT: Oder wenn Sie wirklich den URL-Endpunkt treffen möchten, können Sie einfach die Cookie-Werte an die Anfrage weitergeben, die Sie machen.

@login_required 
def show_info(request): 
    url = get_base_url + "/api/get-info/" # http://localhost:8000/api/get-info/ 
    r = requests.get(url, cookies=request.COOKIES) 
    return HttpResponse(r.json()) 
+0

@Wendy - Schau dir den Schnitt an. Vielleicht hilft dir das. – JRodDynamite

+0

ja! das ist, was ich gesucht habe ... danke :) – Wendy