1

私のプロジェクトでは、自分の見解で同じプロジェクトで実行されているURLをヒットしようとしています。djangoでのリクエストの代替

私はここで簡単に説明することができます。

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

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

API

@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()) 

の上に消費している別のビュー今私は(必要なログイン)同じセッションを使用する必要があり、私はrequestsを使用してURLを打つときに、ユーザが明らかであるLOGGEDINされていないと文句を言い正しい。

どのようにこれをエレガントで効率的に行うことができますか。ログインしたユーザーのセッション使用。 (私は機能としてビューを呼び出したいいけない、私は、API-URLエンドポイントをヒットしたいと消費

PS:私たちはDjangoのテストでself.client.get(...)

+2

なぜあなただ​​けの直接他のビュー機能を呼び出すのではなく、HTTPを使用しようとしていますか?あるいは、なぜ、ロジックを別の関数/メソッド/に置き換えて、両方のビューから呼び出されるのでしょうか? – koniiiik

答えて

2

を似た何かを持っているだけで、そのビュー機能とパスを呼び出しますそれへのパラメータとしてrequestオブジェクト。

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

あるいは、より良いオプションは、コメントで@koniiiikで述べたように、単に、別の関数にロジックを分離することでしょう。

EDIT:また、実際にURLエンドポイントをヒットしたい場合は、リクエストにCookieの値を渡すだけで済みます。

@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 - 編集を見てください。多分それがあなたを助けるでしょう。 – JRodDynamite

+0

はい!それは私が探していたものです...ありがとう:) – Wendy