(开源)微信投票活动

微信朋友圈中经常看到各种投票活动,正好工作中也有相同的需求,做成模块django-wechatvote(安装:pip install django-wechatvote)开源出来,有这方面需求的童鞋可以参考使用!

线上体验Demo效果

1.先在微信中扫描下面二维码关注我的测试公众号(由于要使用到公众号的网页授权获取用户基本信息接口,此接口必须为服务号,且经过认证。博主没有服务号,使用测试号先测试使用)

mahua

2.再在微信中扫描下面的二维码直接进入创建好的活动页面,就可以在活动中上传作品、参与投票、查看排名、搜索作品、分享投票活动…

mahua

准备

  • 微信服务号且经过认证(由于要用到微信公众号的网页授权获取用户基本信息接口),或者如果你没有服务号,可以暂时先使用一个微信订阅号的测试号进行测试使用
  • 配置微信公众号(上一步你使用的微信服务号或者测试号)的网页授权获取用户基本信息接口对应的授权回调页面域名(提示:在公众号后台的接口权限中可以找到)
  • 已创建Django项目(版本>=1.8)
  • 安装django-wechatvote:pip install django-wechatvote

配置Django

1.在settings.py文件中配置:

(1).在INSTALLED_APPS中新增vote:

1
2
3
4
5
INSTALLED_APPS = (
....
'vote',
....
)

(2).保证TEMPLATES中的APP_DIRS配置为True(默认为True):

1
2
3
4
5
6
7
TEMPLATES = [
{
...
'APP_DIRS': True,
...
},
]

(3).设置CACHES(这里已redis为例,当然你也可以使用其他类型的cache,甚至多个cache):

1
2
3
4
5
6
7
8
9
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
}

(4).设置微信公众号参数:

1
2
3
4
WECHAT_APPID = 'xxxxxxx' # 公众号appid
WECHAT_APPSECRET = 'xxxxxx' # 公众号app secret
WECHAT_JS_DOMAIN = 'xxxxxx' # 回调域名
WECHAT_TOKEN = 'xxxxx' # token设置(此配置处可以不设置)

(5).七牛图床配置(图片存储使用了七牛作为图床,相当好用):

1
2
3
4
QINIU_ACCESS_KEY = 'xxxxx'
QINIU_SECRET_KEY = 'xxxxxx'
QINIU_BUCKET_NAME = 'xxxxx'
QINIU_BUCKET_DOMAIN = 'xxxxx'

2.在urls.py文件中配置:

1
2
3
4
5
6
7
8
9
10
from vote.urls_api import v1_api as vote_v1_api
import vote.urls_api
import vote.urls_tmp
urlpatterns = [
...
url(r'^api/', include(vote_v1_api.urls)),
url(r'^api/', include(vote.urls_api)),
url(r'^vote/', include(vote.urls_tmp)),
...
]

同步数据库

1
2
python manage.py makemigrations vote
python manage.py migrate

运行Django

1
python manage.py runserver 0.0.0.0:8000

新建投票活动

进入django admin管理后台,在Vote下点击Vote activitys,然后点击新增一条记录出现如下页面:

mahua

字段说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# (保留字段,暂未使用,可以不添加)
create_uid = models.IntegerField(default=0)
# (保留字段,暂未使用,可以不添加)
write_uid = models.IntegerField(default=0)
# 活动名
name = models.CharField(default='', max_length=32)
# 背景图(不同的投票活动可能只有背景图和活动详情图不一样,其他流程都一样)
background_image = models.ForeignKey('VoteImage', related_name='activity_bg_image', blank=True, null=True, on_delete=models.SET_NULL)
# 活动详情图
detailinfo_image = models.ForeignKey('VoteImage', related_name='activity_di_image', blank=True, null=True, on_delete=models.SET_NULL)
# 更多图片(保留字段,暂未使用,可以不添加)
images = models.ManyToManyField('VoteImage', related_name='activity_images', blank=True)
# 每个用户对一个活动最多可以上传几个作品(0表示无限制)
up_product_max = models.PositiveIntegerField(default=0)
# 每个用户对一个活动最多可以投几次票(0表示无限制)
vote_activity_max = models.PositiveIntegerField(default=0)
# 每个用户对一个作品最多可以投几次票(0表示无限制)
vote_product_max = models.PositiveIntegerField(default=0)
# 是否可以给自己投票
vote_self_enabled = models.BooleanField(default=False)
# 活动截止时间
end_time = models.DateTimeField(default=timezone.now)
# 是否验证活动截止时间
is_endtime_active = models.BooleanField(default=False)
# 是否可用
active = models.BooleanField(default=True)

输入数据后,保存这条记录,得到此记录的id。到此,一个新的投票活动就完成了。

查看投票活动

那么这个活动的地址是什么呢?

就是http://domain/vote/activity/index/id/ (其中的domain为上面步骤中在django settings中配置WECHAT_JS_DOMAIN的值,id为上一步新增的投票活动的id值)

在微信中打开此链接即可看到最终效果!!!(可以把链接直接做成二维码,在微信中扫一扫,方便宣传此投票活动)

坚持原创技术分享,您的支持将鼓励我继续创作!

热评文章