【问题标题】:Django - redirect list of users (other than the current user) from viewDjango - 从视图中重定向用户列表(当前用户除外)
【发布时间】: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


【解决方案1】:

创建一个 javascript 部分,让每个用户客户端连续发出请求,作为一个用于重定向标志的异步进程。当您希望它们重定向时,请将标志设置为 true。当每个客户端发出下一个请求时,该标志将告诉他们重定向。然后在每个客户端上使用window.location = "redirect/url"。如果标志为假,则什么也不做。对于教学(我假设这是您当前用户的意思),只是不要提出请求。

你也可以像@Melvyn 在他们上面的评论中所说的那样使用 websockets。我相信 Websockets 使用了这个想法。

【讨论】:

    猜你喜欢
    • 2011-05-29
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多