2017-06-27 17 views
1

私は教師が複数の選択肢の質問を学生に送信できるようにするDjangoでWebアプリケーションを構築しています。今のところ、教師が質問をクリックすると、ログインしているすべての生徒を質問ページ(質問フォームを含む)にリダイレクトしたいと思います。しかし、これは私が苦労しているものであるビューから現在のユーザー以外のユーザーをリダイレクトする必要があります。私はリダイレクト(レンダリング、HttpResponseRedirectなど)のすべての形式を調べて、ユーザーパラメータを入力できるかどうかを確認しましたが、これは可能ではないようです。以下は、すべてのユーザーを質問ページにリダイレクトするビューです。私は、Djangoのメッセージを研究しているDjango - 現在のユーザー以外のユーザーのリストをビューからリダイレクト

@login_required 
@user_is_on_course 
def pushquestion(request, course_code, profquestion_id): 
    course = Course.objects.get(code=course_code) 
    choices = Choice.objects.filter(question=profquestion_id) 
    users = get_current_users(request, course) #gets list of students 
    for u in users: 
     #This is where I want to redirect all users to the question page 

    return render(request, 'thesis/professorquestion.html' {'profquestion':profquestion_id, 'course': course, 'choices':choices}) 


def get_current_users(request,course): 
    active_sessions = Session.objects.filter(expire_date__gte=timezone.now()) 
    user_id_list = [] 
    for session in active_sessions: 
     data = session.get_decoded() 
     user_id_list.append(data.get('_auth_user_id', None)) 
    return UserProfile.objects.filter(id__in=user_id_list, courseID=course) 

は、しかし、これは、すべてのユーザー(警告ボックスのよりとして動作しているように思われる)への質問フォームを送信するために適していないよう備えています。私は長いポーリングやウェブソケットを使って、教授が質問にpingするのを待っている学生アカウントにイベントリスナーを追加しています(おそらく、この行に沿った何か:https://github.com/GetBlimp/django-websocket-request)。しかし、初心者のプログラマーでDjangoの初心者であれば、私が達成しようとしているものが比較的重いように思えるので、私はこれらのアイデアで間違ったツリーを作り上げているのかどうかはわかりません(1つのビューからユーザーリストをリダイレクトします) 。

+0

あなたが求めていることは理にかなっていません。現在ページを要求しているユーザーのみリダイレクトできます。他の人はリダイレクトを要求していません。彼らがそうしたとき、あなたがそれらをリダイレクトすることができます。 –

+1

@DanielRoseman実際には、ログインしているすべてのユーザーをチャンネルに登録し、ブラウザにURLを変更するように指示するコマンドを発行することができるので、websocketsは樹皮をつけるのに適したツリーです。しかし、これは標準的なDjangoの機能ではできません。 ehylandの場合:[Django channels](https://channels.readthedocs.io/en/stable/)の使用を検討してください。しかし、あなたは勉強しなければなりません:)。 – Melvyn

+0

@メルヴィンそれは意味がある、私はチャネルを調べるだろう。ありがとうございました! – ehyland

答えて

0

リダイレクトするフラグの非同期処理として、各ユーザーのクライアントが継続的にリクエストを作成するJavaScript部分を作成します。リダイレクトする場合は、フラグをtrueに設定します。各クライアントが次のリクエストを行うと、フラグはリダイレクトするように指示します。各クライアントでwindow.location = "redirect/url"を使用します。フラグがfalseの場合は、何もしないでください。教え(私はあなたが現在のユーザーによって何を意味していると仮定しています)については、要求をしないでください。

@MelvynのようなWebソケットを使用することもできます。 Websocketsは私が信じているこの考えを使用しています。

関連する問題