Пример #1
0
 def get(self,request):
     code = request.GET.get('code')
     next = request.GET.get('state') or '/'
     if not code:
         return HttpResponse(request, '登录失败')
     oauth = OAuthWB(client_id=settings.WEIBO_APP_ID, client_secret=settings.WEIBO_APP_KEY,
                     redirect_uri=settings.WEIBO_REDIRECT_URI, state=next)
     try:
         # 使用code向QQ服务器请求access_token
         access_token = oauth.get_access_token(code)
         # 使用access_token向QQ服务器请求openid
         user_info = oauth.get_user_info(access_token)
         openid = user_info.get('id')
     except Exception as e:
         logger.error(e)
         print('a')
         return HttpResponseServerError('OAuth2.0认证失败')
     try:
         user = OAuthWeiBoUser.objects.get(openid=openid)
     except OAuthWeiBoUser.DoesNotExist:
         openid = generate_openid_signature(openid)
         context = {'openid': openid}
         return render(request, 'oauth_callback.html', context)
     else:
         login(request, user.user)
         response = redirect(next)
         response.set_cookie('username', user.user, max_age=3600 * 24 * 15)
         return response
Пример #2
0
def product(request):
    assert isinstance(request, HttpRequest)
    select = request.GET.get('select', '')

    if select == 'max':
        products = Product.objects.all().order_by('-price')[:3]
    elif select == 'min':
        products = Product.objects.all().order_by('price')[:3]
    else:
        products = Product.objects.all()
    count = Product.objects.count()
    orders = OrderProduct.objects.all().filter(
        order_id=Order.objects.all().filter(
            customer_id__first_name=request.user),
        product_id=Product.objects.filter(price__in=[1, 200]))
    average = Product.objects.all().aggregate(Avg('price'))
    logger.error(orders.query)
    avg = average['price__avg']

    return render(
        request, './product.html', {
            'products': products,
            'count': count,
            'orders_in': products,
            'average': avg,
        })
    return render(request, './contact.html', locals())
Пример #3
0
    def form_valid(self, form):
        """提交的数据验证合法后的逻辑"""

        # 首先根据 url 传入的参数(在 self.kwargs 中)获取到被评论的文章
        target_article = get_object_or_404(Blog, pk=self.kwargs['article_id'])

        # 调用ModelForm的save方法保存评论,设置commit=False则先不保存到数据库,
        # 而是返回生成的comment实例,直到真正调用save方法时才保存到数据库。
        comment = form.save(commit=False)
        text = comment.content

        # 把评论和文章关联
        comment.article = target_article
        if self.request.user.is_authenticated:
            comment.user = self.request.user
            print(comment.user)

        parent = None
        if text.startswith('@['):
            import ast
            parent_str = text[1:text.find(':')]
            parent_id = ast.literal_eval(parent_str)[1]
            text = text[text.find(':') + 1:]
            try:
                parent = Comment.objects.get(pk=parent_id)
            except Comment.DoesNotExist:
                return HttpResponse(u'引用评论错误!!')

        if not text:
            logger.error(u'[CommentControl]当前用户输入空评论:[{}]'.format(
                comment.user.username))
            return HttpResponse(u'请输入评论内容!!')

        comment.content = markdown.markdown(
            text,
            extensions=[
                'markdown.extensions.extra',
                'markdown.extensions.codehilite',
                'markdown.extensions.toc',
            ])
        comment.parent = parent
        comment.save()

        # 评论生成成功,重定向到被评论的文章页面
        self.success_url = target_article.get_absolute_url() + "#" + str(
            comment.pk)
        return HttpResponseRedirect(self.success_url)
Пример #4
0
 def post(self,request):
     user=request.user
     json_dict=json.loads(request.body.decode())
     comment=json_dict.get('comment')
     is_anonymous=json_dict.get('is_anonymous')
     score=json_dict.get('score')
     sku_id=json_dict.get('sku_id')
     order_id=json_dict.get('order_id')
     username=user.username
     if not all([sku_id,comment,order_id]):
         return http.HttpResponseForbidden('参数不能为空')
     try:
         SKU.objects.get(id=sku_id)
     except SKU.DoesNotExist:
         return http.HttpResponseForbidden('商品不存在')
     if is_anonymous:
         is_anonymous=True
         username='******'
     with transaction.atomic():
         savepoint = transaction.savepoint()
         try:
             SKUComment.objects.create(
                 sku_id=sku_id,
                 score=score,
                 is_anonymous=is_anonymous,
                 comment=comment,
                 order_id=order_id,
                 username=username
             )
             OrderInfo.objects.filter(order_id=order_id).update(status=5)
             transaction.savepoint_commit(savepoint)
         except Exception as e:
             logger.error(e)
             transaction.savepoint_rollback(savepoint)
             return http.HttpResponseForbidden('评价失败')
     return http.JsonResponse({'code':RETCODE.OK})
Пример #5
0
    def post(self,request):
        user=request.user
        json_dict=json.loads(request.body.decode())
        address_id=json_dict.get('address_id')
        pay_method=json_dict.get('pay_method')
        if not all([address_id,pay_method]):
            return http.HttpResponseForbidden('参数不能为空')
        try:
            address=Address.objects.get(id=address_id,user=user)
        except Exception:
            return http.HttpResponseForbidden('无效地址')
        if pay_method not in [OrderInfo.PAY_METHODS_ENUM['CASH'], OrderInfo.PAY_METHODS_ENUM['ALIPAY']]:
            return http.HttpResponseForbidden('参数pay_method错误')
        order_id=timezone.now().strftime('%Y%m%d%H%M%S')+('%09d'%user.id)
        redis_conn=get_redis_connection('carts')
        selected_id=redis_conn.smembers('selected_%s'%user.id)
        carts_id=redis_conn.hgetall('carts_%s'%user.id)
        carts={}
        for sku in selected_id:
            carts[int(sku)]=int(carts_id[sku])
        with transaction.atomic():
            save_id = transaction.savepoint()
            try:
                order = OrderInfo.objects.create(
                    order_id=order_id,
                    user=user,
                    address=address,
                    total_count=0,
                    total_amount=Decimal('0'),
                    freight=Decimal('10.00'),
                    pay_method=pay_method,
                    status=OrderInfo.ORDER_STATUS_ENUM['UNPAID'] if pay_method == OrderInfo.PAY_METHODS_ENUM['ALIPAY'] else
                    OrderInfo.ORDER_STATUS_ENUM['UNSEND']
                )
                for sku_id, count in carts.items():
                    while True:
                        sku=SKU.objects.get(id=sku_id)
                        # 定义两个变量用来记录当前sku的原本库存和销量
                        origin_stock=sku.stock
                        origin_sales = sku.sales
                        if count>origin_stock:
                            transaction.savepoint_rollback(save_id)
                            return http.JsonResponse({'code': RETCODE.STOCKERR, 'errmsg': '库存不足'})
                        result=SKU.objects.filter(id=sku_id,stock=origin_stock).update(stock=origin_stock-count,sales=origin_sales+count)
                        if result==0:
                            continue
                        sku=SKU.objects.get(id=sku_id)
                        sku.spu.sales+=count
                        sku.spu.save()
                        OrderGoods.objects.create(
                            order=order,
                            sku=sku,
                            count=count,
                            price=sku.price,
                        )
                        order.total_amount+=sku.price*count
                        order.total_count += count
                        break
                order.total_amount += order.freight
                order.save()

            except Exception as e:
                logger.error(e)
                transaction.savepoint_rollback(save_id)
                return http.JsonResponse({'code': RETCODE.DBERR, 'errmsg': '下单失败'})
            transaction.savepoint_commit(save_id)
        pl=redis_conn.pipeline()
        pl.hdel('carts_%s'%user.id,*selected_id)
        pl.srem('selected_%s' % user.id, *selected_id)
        pl.execute()
        return http.JsonResponse({'code': RETCODE.OK, 'errmsg': '下单成功', 'order_id': order.order_id})