ビジネスニーズ:クーポンは小さな広告プログラムの中に、他の多くの小さなプログラムを作りました。
1.原理フローチャート
2.賞(クーポン)の実験データ
表1.クラスに賞のアプリ/広告/ models.pyを変更
クラス賞(models.Model): "" " 奖品""" タイトル = models.CharField(max_lengthを= 15、ヌル= Trueの場合、空白=真、verbose_name = ' 标题'、help_textに= ' 最多15字' ) URL =モデル.CharField(MAX_LENGTH = 200、ヌル= Trueの場合、空白=真、verbose_name = ' 小程序URL ' ) 面積 = models.ForeignKey(エリア、= null = Trueで、空白=真、verbose_name " 地区"、on_delete = models.CASCADE ) get_num = models.IntegerField(デフォルト= 0、verbose_name = ' 被领取数') 価格 = models.IntegerField(デフォルト= 0、verbose_name = ' 必要なポイント' ) all_num = models.IntegerField(デフォルト= 0、verbose_name = ' 発行数' ) is_out = models.BooleanField(デフォルト= Falseを、verbose_name =は" されています販売' ) DESC = models.TextField(デフォルト= ' '400 = MAX_LENGTH、verbose_name = ' 記述'help_textに= ' 最大400の文字' ) 使用 = models.TextField(デフォルト= '' = 200であるMAX_LENGTH、verbose_name = 「使用」、help_textに= ' 最大200の文字' ) 画像 = models.ImageField(MAX_LENGTH = 200、デフォルト= ''、upload_to = ' prizeimg / '、verbose_name = ' 懸賞イメージ' ) END_TIME = models.DateTimeField(デフォルト= DateTime.Now、 = verbose_name ' 有効期限' ) ADD_TIME = models.DateTimeField(デフォルト= DateTime.Now、= verbose_name ' 添加時間' ) クラスのメタ- : verbose_name = " 賞" verbose_name_plural =verbose_name DEF __str__ (自己): 戻りself.title DEF IMAGE_URL(自己): 戻り mark_safe(' <IMG SRC = "/メディア/ {0}"クラス= "field_img"> ' .format(self.image)) image_url.short_description = ' 奖品图片'
データ更新コマンドを実行します。
python manage.py makemigrations
のpython manage.pyの移行
2. PrizeAdmin中のアプリケーション/広告/ adminx.pyを変更
クラスPrizeAdmin(オブジェクト): list_display = [ " タイトル"、" get_num "、" is_out "、" URL "、" 価格"、" 地域"、" all_num "、" DESC "、" 使用方法"、" END_TIME "、" IMAGE_URL " "add_time " ] list_filter = [ " タイトル"、" get_num "、" is_out "、" URL "、" 価格"、" 地域"、" all_num "、" DESC "、" 使用方法"、" END_TIME "、" add_time " ] search_fields = [ "タイトル" " get_num "、" 価格"、" all_num "、" DESC "、" 使用方法" ]
賞金テーブル賞のいくつかを記入するxadmin背景、直接的な実験により3
前記二次元コードの画像を生成します
1.インターネット14(この数はカスタマイズすることができる)からダウンロードし、図の二次元コードの背景画像を生成し、新しいディレクトリの下にGG /静的/ 2を置きます。
2. myqrをインストールします。
myqrをインストールするPIP
3のテーブルGetPrizeクラスのアプリ/ user_operation / models.pyを変更します。
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='二维码') 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 = '二维码'
执行数据更新命令:
python manage.py makemigrations
python manage.py migrate
4.在apps/user_operation/views.py中新建BuyUseJiFen类:
#…… 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: # 用户未领取 # 制作二维码 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.twoimg='twoimg/'+two_name new_getprize.save() # 扣除对应积分 user.jifen=user.jifen-prize.price user.save() # 奖品被领取数+1 prize.is_out = False prize.get_num += 1 prize.save() return HttpResponse('200') else: return HttpResponse('参数不足')
5.在apps/user_operation/urls.py内配置路由:
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()), ]