Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 插入新记录时如何向用户发送短信_Django_Django Rest Framework_Django Views_Django Haystack_Django Smart Selects - Fatal编程技术网

Django 插入新记录时如何向用户发送短信

Django 插入新记录时如何向用户发送短信,django,django-rest-framework,django-views,django-haystack,django-smart-selects,Django,Django Rest Framework,Django Views,Django Haystack,Django Smart Selects,我有型号订单 class Order(models.Model): STATUS = ( ('Pending', 'Pending'), ('Out for delivery', 'Out for delivery'), ('Delivered', 'Delivered'), ) shop = models.ForeignKey(Shop, models.CASCADE, null=True) customer = models.ForeignKey(Customer,

我有型号订单

class Order(models.Model):
STATUS = (
    ('Pending', 'Pending'),
    ('Out for delivery', 'Out for delivery'),
    ('Delivered', 'Delivered'),
)
shop = models.ForeignKey(Shop, models.CASCADE, null=True)
customer = models.ForeignKey(Customer, models.CASCADE, null=True)
product = models.ForeignKey(Product, models.CASCADE, null=True)
quantity = models.CharField(max_length=30, null=True, )
date_created = models.DateTimeField(auto_now_add=True, null=True)
status = models.CharField(max_length=200, null=True, choices=STATUS, default='Pending')
note = models.CharField(max_length=1000, null=True)
当客户插入订单时,我如何向商店发送短信,然后商店接收到客户新订单的短信。数量中的product.name

客户模型 商店模型 和我的订单视图.py

def CreateOrder(request, shop_id, product_id):
    customer = request.user.customer
    shop = Shop.objects.get(id=shop_id)
    product = Product.objects.get(id=product_id)
    form = OrderForm()
    quantity = request.POST.get('quantity')
    note = request.POST.get('note')
    if request.method == 'POST':
        order = Order.objects.create(customer=customer, shop=shop,
                                   product=product, quantity=quantity, note=note)
        return redirect('CustomerOrder')
你可以在Django中使用。基本上,当某些事件发生时,您的应用程序将收到通知。在您的情况下,您可以使用
post\u save
,在调用模型的
save()
方法后将触发信号。在Django文档中,您可以查看可用的不同类型的
信号的完整列表

from .models import Order, Shop, Customer
from django.dispatch import Signal, receiver
from django.db.models.signals import post_save


@receiver(post_save, sender=Order)
def send_msg_to_shop_owners(sender, instance, **kwargs):
    # YOUR CODE HERE 
    pass
    
在接收器内部,您可以使用发送API调用到您想要使用的任何消息服务

注意:
post\u save
信号将在调用您的
订单
型号的
save()方法时触发。这将包括更新您的模型。因此,根据您的用例,您甚至可以创建自己的
自定义信号

Django中的自定义信号

from django.dispatch import Signal, receiver

# DEFINE SIGNAL NAME WITH REQUIRED ARGUMENTS; FOR NOW JUST order_id, user_name
send_message_to_shop_owner = Signal(providing_args=["order_id","user_name"])

@receiver(send_message_to_shop_owner)
def send_message_to_shop_owner_receiver(sender, **kwargs):
    # access the parameters passed
    # order_id = kwargs["order_id"]
    # user_name = kwargs["user_name"]
    # REST OF YOUR CODE GOES HERE
    pass
现在您已经定义了
信号
,您需要在希望
发送
消息时触发它。在
drf
中,我通常将其放在
serializers.py中,但您可以在
视图中执行。
以下是您将如何触发该信号

views.py

from .signals import send_message_to_shop_owner

def CreateOrder(request, shop_id, product_id):
    customer = request.user.customer
    shop = Shop.objects.get(id=shop_id)
    product = Product.objects.get(id=product_id)
    form = OrderForm()
    quantity = request.POST.get('quantity')
    note = request.POST.get('note')
    if request.method == 'POST':
        order = Order.objects.create(customer=customer, shop=shop,
                                   product=product, quantity=quantity, note=note)
        # Ignore my custom parameters, instead of that you can send yours
        send_message_to_shop_owner.send(Sender=Order, order_id=order_id,user_name=user_name)
        return redirect('CustomerOrder')

注意:对于
自定义信号
您需要随时触发它。

如果您不使用它,请不要使用
drf
标记。我看到你们提出的许多问题都遵循同样的模式。顺便说一句,我注意到你们所有的问题都没有答案。你看到了吗?这有助于表明你的问题已经解决。有可能你真的没有得到任何令人满意的答案;我只是想确定你知道这个功能
from django.dispatch import Signal, receiver

# DEFINE SIGNAL NAME WITH REQUIRED ARGUMENTS; FOR NOW JUST order_id, user_name
send_message_to_shop_owner = Signal(providing_args=["order_id","user_name"])

@receiver(send_message_to_shop_owner)
def send_message_to_shop_owner_receiver(sender, **kwargs):
    # access the parameters passed
    # order_id = kwargs["order_id"]
    # user_name = kwargs["user_name"]
    # REST OF YOUR CODE GOES HERE
    pass
from .signals import send_message_to_shop_owner

def CreateOrder(request, shop_id, product_id):
    customer = request.user.customer
    shop = Shop.objects.get(id=shop_id)
    product = Product.objects.get(id=product_id)
    form = OrderForm()
    quantity = request.POST.get('quantity')
    note = request.POST.get('note')
    if request.method == 'POST':
        order = Order.objects.create(customer=customer, shop=shop,
                                   product=product, quantity=quantity, note=note)
        # Ignore my custom parameters, instead of that you can send yours
        send_message_to_shop_owner.send(Sender=Order, order_id=order_id,user_name=user_name)
        return redirect('CustomerOrder')