在Django中使用极光推送

用Django搭建Android端后台服务时不可避免会有推送相关需求,Django signals配合极光推送可以达到不错的效果,signals如何使用见官方文档https://docs.djangoproject.com/en/3.0/ref/signals/。

1.安装相关依赖

  • 在极光官网获取AppKey及Master Secret
  • 安装jpush pip install jpush

2.编写Django项目代码

models.py

from django.db import models

class Article(models.Model):
   title = models.CharField(max_length=20, verbose_name="标题")
   content = models.TextField(verbose_name="内容")
   create_time = models.DateTimeField(auto_now_add=True, verbose_name='添加时间')
   update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')

   class Meta:
       ordering = ['-create_time']
       verbose_name = "文章"
       verbose_name_plural = verbose_name

   def __str__(self):
       return self.title

admin.py

from django.contrib import admin

# Register your models here.
from .models import Article

class ArticleAdmin(admin.ModelAdmin):
    list_display = ['title', 'create_time']
    search_fields = ['title']


admin.site.register(Article, ArticleAdmin)

signals.py

from django.db.models.signals import post_save
from django.dispatch import receiver
from django.http import JsonResponse

from blog.models import Article
# app_key及master_secret写在settings.py文件中,自行去极光官网申请即可
from django_jpush.settings import app_key, master_secret

import jpush

_jpush = jpush.JPush(app_key, master_secret)
_jpush.set_logging("INFO")


@receiver(post_save, sender=Article, dispatch_uid="article_created")
def create_article(sender, instance=None, created=False, **kwargs):
    response = {}
    if created:
        try:
            article_create_notification(instance.title, instance.id)
        except Exception as e:
            response['msg'] = str(e)
            return JsonResponse(response)


def article_create_notification(title, article_id):
    push = _jpush.create_push()

    push.audience = jpush.all_
    push.platform = jpush.all_

    ios = jpush.ios(alert="Hello, IOS JPush!", sound="a.caf", extras={'k1': 'v1'})
    android = jpush.android(alert="title:{},id:{}".format(title, article_id), priority=1, style=1, alert_type=1, )

    push.notification = jpush.notification(alert="Hello, JPush!", android=android, ios=ios)

    push.send()

apps.py

from django.apps import AppConfig


class BlogConfig(AppConfig):
    name = 'blog'

    def ready(self):
        import blog.signals

3.启动服务器并添加内容

生成好数据文件及创建完superuser用户之后运行服务器,进入管理后台

4.查看APP端消息


成功收到推送消息

安卓Demo去极光官网下载即可,AppKey需与settings.py中配置的相同

示例代码: https://github.com/prince5460/django_jpush

原文地址:https://www.cnblogs.com/prince5460/p/14176297.html