javascript - 从 Django 服务器触发 javascript 函数
问题描述
我正在研究IPN。每当我在这个 url: 中收到 IPN 时https://www.mywebsitename.com/notifications
,我想运行一个简单的 JavaScript 函数来显示一些 html 内容。
我从服务器端管理 IPN,如下所示:
@csrf_exempt
def notifications(request):
if request.method == "POST":
#some code
我想在该代码块中触发我的 JS 函数,但我想不出任何方法来做到这一点。另外,我真的不知道我要问的是否真的可能,也许还有另一种我自己无法弄清楚的方法。
解决方案
这在 Django 使用 Websockets 时是 100% 可能的。听起来您正在尝试根据您在某个 url 上收到请求的时间来为 UI 构建通知系统。首先查看 Django 频道:https ://channels.readthedocs.io/en/stable/
这是在 Django 中使用 Websockets 的最佳方式,它可以帮助您实现通知或其他实时功能。文档中的教程很棒。要解决您的任务,您应该:
- 按照教程并在您的 Django 应用程序中设置 WebSocket 使用者来处理通知。这将允许前端用户与您的应用程序建立实时连接并从中接收消息。
- 完成您的通知视图。在收到付款请求后,您将向您的 websocket 消费者发送一条消息,供任何需要接收消息的用户使用。它最终可能看起来像这样:
# assuming that the request gives you the username of the user to be notified,
# and you have a group configured in your consumer
def notification_view(request):
if request.method == "POST":
username = request.POST.get('username')
group_name = 'notifications{}'.format(username)
channel_layer = channels.layers.get_channel_layer()
async_to_sync(channel_layer.group_send)(
group_name,
{
'type': 'new_payment',
'text': {
'eventType': 'notification',
'name': 'New Payment',
'userMessage': 'You just got paid'
}
}
return(HttpResponse(status=200))
当收到请求时,这将通过用户的套接字发送一条消息。
在您的 js 中,您将为套接字设置一个侦听器。然后,您可以收听消息并使用您收到的数据在文档中做任何您想做的事情,例如向用户显示消息:
var endpoint = 'ws://' + '<yourhost>/notifications/username/;
var socket = new ReconnectingWebSocket(endpoint);
socket.onmessage = e => {
data = JSON.parse(e.data);
let msg = document.createElement('<p>');
msg.innerText = data['text']['userMessage']
}
只需按照教程进行操作,这肯定会让您朝着正确的方向前进!
推荐阅读
- reactjs - 根据条件显示反应组件
- html - 无法根据内容自动设置 HTML 列的宽度
- mysql - 需要使用“mysql root -p”访问SQL
- amazon-web-services - 具有只读权限的 CDK diff - 什么是好方法?
- google-apps-script - 如何使用 ID 将公共 google 文件/文件夹导入使用 google 脚本的 gdrive 帐户?
- apscheduler - APScheduler python:我的计划作业在同一时间段运行多次
- javascript - 包含项目库的节点库的单例问题
- shopify - 如何使用 JavaScript 在 Shopify 上格式化货币
- flutter - 启动 main.dart 颤振项目的问题
- python - Python从生成器项中获取最后一个元素