class Prize(models.Model): """獎品""" title = models.CharField(max_length=15, null=True, blank=True, verbose_name='標題', help_text='最多15字') url=models.CharField(max_length=200, null=True, blank=True, verbose_name='小程序url') area = models.ForeignKey(Area, null=True, blank=True, verbose_name="地區", on_delete=models.CASCADE) get_num=models.IntegerField(default=0,verbose_name='被領取數') price = models.IntegerField(default=0, verbose_name='所需積分') all_num=models.IntegerField(default=0,verbose_name='發佈數') is_out=models.BooleanField(default=False,verbose_name='是否已售罄') desc = models.TextField(default='', max_length=400, verbose_name='描述', help_text='最多400字') usage = models.TextField(default='', max_length=200, verbose_name='使用方式', help_text='最多200字') image = models.ImageField(max_length=200, default='', upload_to='prizeimg/', verbose_name='獎品圖片') end_time = models.DateTimeField(default=datetime.now, verbose_name='過時時間') add_time = models.DateTimeField(default=datetime.now, verbose_name='添加時間') class Meta: verbose_name = "獎品" verbose_name_plural = verbose_name def __str__(self): return self.title def image_url(self): return mark_safe('<img src="/media/{0}" class="field_img">'.format(self.image)) image_url.short_description = '獎品圖片'
執行數據更新命令:python
python manage.py makemigrations
python manage.py migrate
class PrizeAdmin(object): list_display = ["title", "get_num","is_out","url","price","area", "all_num", "desc","usage","end_time","image_url","add_time"] list_filter = ["title", "get_num","is_out","url", "price", "area","all_num", "desc","usage","end_time","add_time"] search_fields = ["title", "get_num", "price", "all_num", "desc","usage"]
pip install myqr
class GetPrize(models.Model): """兌獎表""" user = models.ForeignKey(UserProfile, verbose_name="用戶", on_delete=models.CASCADE) prize=models.ForeignKey(Prize, verbose_name="獎品", on_delete=models.CASCADE) title = models.CharField(max_length=15, null=True, blank=True, verbose_name='標題', help_text='最多15字') status = models.CharField(choices=(("0", "未使用"), ("1", "已使用")),default="0",max_length=6, verbose_name="使用狀態") twoimg=models.ImageField(max_length=200, default='', upload_to='twoimg/', verbose_name='二維碼') end_time = models.DateTimeField(default=datetime.now, verbose_name='過時時間') add_time = models.DateTimeField(default=datetime.now, verbose_name="添加時間") class Meta: verbose_name = "兌獎表" verbose_name_plural = verbose_name def __str__(self): return self.prize.title def image_url(self): return mark_safe('<img src="/media/{0}" class="field_img">'.format(self.twoimg)) image_url.short_description = '二維碼'
執行數據更新命令:django
python manage.py makemigrations
python manage.py migrate
#…… from users.models import UserProfile from .serializers import MessageModelSerializer,GetPrizeModelSerializer from .models import Message,GetPrize from ad.models import Prize from MyQR import myqr import os,random from gg.settings import BASE_DIR #…… class BuyUseJiFen(APIView): """購買積分商品,生成二維碼,控制每一個用戶領取一次""" renderer_classes = [JSONRenderer] # 渲染器 def get(self,request): token = request.GET.get('token') user = UserProfile.objects.filter(token=token).first() prizeid=request.GET.get('prizeid') if user and prizeid: prizeid_int = int(prizeid) prize = Prize.objects.filter(id=prizeid_int).first() if prize.get_num>=prize.all_num: # 若是獎品的領取數大於等於發佈數,則返回已售罄 prize.is_out=True prize.save() return HttpResponse('403') else: # 兌獎表,查看用戶是否已經領取過了這個優惠券,若是已經領取過了則返回已經領取過了 p=GetPrize.objects.filter(user=user,prize=prize).first() if p: # 已經領取過了 return HttpResponse('404') else: # 用戶未領取 # 扣除對應積分 if (user.jifen - prize.price)>=0: user.jifen = user.jifen - prize.price user.save() # 製做二維碼 two_name=str(user.id)+'and'+prizeid+'.png'#生成二維碼文件名 b = os.path.join(BASE_DIR, 'static/2/' + str(random.randint(1, 14)) + '.jpg')#背景圖片路徑 c_dir = os.path.join(BASE_DIR, 'media/twoimg')#生成二維碼的存放目錄 user_openid=user.open_id url=prize.url+"?pid="+prizeid+"&oid="+user_openid myqr.run(words=url,version=5,level='H',picture=b,colorized=True,save_dir=c_dir,save_name=two_name) # 生成兌獎表記錄 new_getprize=GetPrize() new_getprize.user=user new_getprize.prize=prize new_getprize.title=prize.title new_getprize.end_time=prize.end_time new_getprize.twoimg='twoimg/'+two_name new_getprize.save() # 獎品被領取數+1 prize.is_out = False prize.get_num += 1 prize.save() msg = Message() msg.user = user msg.content = "您成功領取了 獎品:" +prize.title msg.save() return HttpResponse('200') else: # 積分不足 return HttpResponse('405') else: return HttpResponse('參數不足')
from django.urls import path from .views import GetMessage,ReadMessage,DelMessage,BuyUseJiFen urlpatterns = [ path('getmessage/',GetMessage.as_view()), path('readmessage/',ReadMessage.as_view()), path('delmessage/',DelMessage.as_view()), path('buyusejifen/',BuyUseJiFen.as_view()), ]