我正在使用Django构建一个Web应用程序,允许教师向学生发送多项选择题。目前,我想在教师点击问题时将所有已登录的学生重定向到问题页面(包含问题表单)。但是,这需要将当前用户以外的用户重定向到我正在努力的视图中。我已经研究了每种形式的重定向(render,HttpResponseRedirect等),看看我是否可以输入用户参数,但这似乎不可能。以下是我想将所有用户重定向到问题页面的视图。
@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)
我已经研究过Django消息功能但是这似乎不适合向所有用户发送问题表单(似乎更像是一个警告框)。我还研究过使用长轮询或网络套接字来在学生账户上添加一个事件监听器,等待教授对问题进行ping操作(可能是这样的:https://github.com/GetBlimp/django-websocket-request)。然而,作为Django的初学者程序员和完全新手,我不确定我是否因为这些想法而错误地咆哮错误的树,因为它们对于我想要实现的目标看起来相对重量级(重定向一个用户列表)视图)。
答案 0 :(得分:0)
创建一个javascript部分,让每个用户客户端连续发出请求,作为重定向标志的异步过程。如果希望它们重定向,请将标志设置为true。当每个客户端发出下一个请求时,该标志将告诉他们重定向。然后在每个客户端上使用window.location = "redirect/url"
。如果标志为false,则不执行任何操作。对于教学(我假设这是你当前用户的意思),只是不要提出请求。
您也可以在上面的评论中使用像@Melvyn这样的websockets。 Websockets使用了我认为的这个想法。