【发布时间】:2017-06-27 08:24:57
【问题描述】:
我正在使用 Django 构建一个 Web 应用程序,它允许教师向学生发送多项选择题。现在,当老师点击问题时,我想将所有登录的学生重定向到问题页面(包含问题表格)。但是,这需要从我正在努力解决的视图中重定向当前用户以外的用户。我研究了每种形式的重定向(渲染、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 消息功能,但这似乎不适合向所有用户发送问题表单(似乎更像是一个警报框)。我还研究过使用长轮询或网络套接字在学生帐户上添加一个事件侦听器,等待教授解决问题(可能类似于以下内容:https://github.com/GetBlimp/django-websocket-request)。但是,作为一个初学者程序员和 Django 的新手,我不确定我是否用这些想法在错误的树上吠叫,因为它们对于我想要实现的目标似乎相对重量级(从一个视图重定向用户列表) .
【问题讨论】:
-
你的要求毫无意义。您只能重定向当前正在请求该页面的用户。其他人没有提出重定向请求;当他们这样做时,您就可以重定向他们。
-
@DanielRoseman 实际上,websockets 是正确的树,因为您可以将所有登录用户订阅到频道并发出指示浏览器更改 URL 的命令。但是,是的,这不能用标准的 Django 工具来完成。对于 ehyland:考虑使用 Django channels。但你得好好学习:)。
-
@Melvyn 有道理,我会调查渠道。谢谢!
标签: python django redirect django-users