2016-09-14 9 views
0

が来た場合、私はあなたがURLにアクセスするときに実行するスケジュールセロリタスクという見解持っているに基づいてビューへのアクセスを制限する:私はちょうどこれに入るの人を防ぐために希望要求は、他のビューから

class ScheduleTask(View): 

    def get(self, request, *args, **kwargs): 
     obj = get_object_or_404(ObjModel, uuid=kwargs.get('obj', None)) 
     context = { 
      'site': RequestSite(request), 
      'secure': request.is_secure() 
     }  
     schedule_task.delay(obj.uuid, context) # schedule celery task 
     return redirect(reverse(
      'users:user-list', 
      kwargs={'user': obj.user.uuid})) 

をビューのURLをブラウザ(タスクをスケジュールするので)。もし私が許可されていれば、許可が拒否されました。

class CompletionView(TemplateView): 
    def post(self, request, *args, **kwargs): 

     ... 

     if 'save_and_submit' in request.POST: 
      # This is the only place I would like ScheduleTask to 
      # run from. 
      return redirect(reverse('users:schedule-task', 
       kwargs={'obj': obj_uuid})) 

私はこれをどのようにして実現できますか?何らかのトークンやクッキーを設定する必要があるような気がしますが、私は完全にはわかりません。多分ScheduleTaskビューにも必要ではない、と私はちょうど私があなたは完全にあなたがそれらのAPIの一つだけを使用してやっているものを達成することができ、あなたは、単にあなたのCompletionViewからあなたセロリのタスクを呼び出すことができますねif 'save_and_submit' in request.POST

+1

あなたはCompletionViewでセロリのタスクを実行して、やっていることの代わりに 'users:user-list'にリダイレクトできませんか?あなたは基本的に何かを内部的にしたいのですが、なぜそれを外部に公開するのですか? – SpiXel

+0

はい、あなたはまったく正しいと思います。まずは不必要なビューです。 – denvaar

答えて

1

後にコードを置く必要があります。実際に

class CompletionView(TemplateView): 
    def post(self, request, *args, **kwargs): 

     ... 

     if 'save_and_submit' in request.POST: 
      # This is the only place I would like ScheduleTask to 
      # run from. 
      schedule_task.delay(obj.uuid, context) 
      return redirect(reverse(
       'users:user-list', 
       kwargs={'user': obj.user.uuid})) 

あなたは、このAPIは公開したくない場合は、ちょうどはそれをさらさないでください。

関連する問題