def detail(request,id): ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = 'Blog' try: article = Article.objects.get(id=id) except: raise Http404 ctx['article'] = article if request.method =='GET': #正常访问,返回动态页面 return render(request,System_Config.get_template_name() + '/article.html', ctx) elif request.method == 'POST':#通过ajax访问,生成静态文件 content = render_to_string(System_Config.get_template_name() + '/article.html', ctx) result_dict = {} try: import codecs,os #先获取商品所属分类,作为目录 dir = 'media/' + article.folder if not os.path.exists(dir): os.makedirs(dir) f = codecs.open(dir + article.static_file_name ,'w','utf-8') f.write(content) f.close() result_dict['success'] = True result_dict['message'] = _('File already generated.') except Exception as err: logger.error('写文件失败。' + str(err)) result_dict['success'] = False result_dict['message'] = _('File generate failed.') finally: if f is not None: f.close() return JsonResponse(result_dict)
def register(request): ctx = {} ctx.update(csrf(request)) ctx['system_para'] = get_system_parameters() ctx['menu_products'] = get_menu_products() ctx['page_name'] = 'Regitser' ctx = add_captcha(ctx) #添加验证码 logger.debug('Enter register function.') if request.method == 'GET': #GET请求,直接返回页面 return TemplateResponse(request,System_Config.get_template_name() + '/register.html',ctx) else: form = register_form(request.POST) # 获取Post表单数据 if form.is_valid():# 验证表单 from .utils import get_remote_ip ip = get_remote_ip(request) myuser = MyUser.objects.create_user(username=None,email=form.cleaned_data['email'].lower(),password=form.cleaned_data['password'],first_name=form.cleaned_data['first_name'],last_name=form.cleaned_data['last_name']) myuser.reg_ip = ip myuser.last_ip = ip myuser.save() #触发用户注册成功的事件 signals.user_registration_success.send(sender='MyUser',user=myuser) #return redirect('/user/login') #准备登陆 myuser.password = form.cleaned_data['password'] return inner_login(request,myuser,ctx) else: logger.error('form is not valid') ctx['reg_result'] = _('Registration faild.') return TemplateResponse(request,System_Config.get_template_name() + '/register.html',ctx)
def do_login(request,myuser,ctx): logger.debug('do_login myuser:%s' % myuser) if myuser is not None: if myuser.is_active == True: auth.login(request,myuser) from .utils import get_remote_ip ip = get_remote_ip(request) myuser.last_ip = ip myuser.save() mycart = merge_cart(request) redirect_url = reverse('product_view_list') if 'next' in request.POST: if len(request.POST['next']) > 0: redirect_url = request.POST['next'] response = redirect(redirect_url) response.set_cookie('cart_id',mycart.id,max_age = 3600*24*365) response.set_cookie('cart_item_type_count',mycart.cart_products.all().count(),max_age = 3600*24*365) response.set_cookie('icetususer',myuser.email) logger.debug('>>>>>>>>>user.backend:%s , type is %s' % (myuser.backend,type(myuser.backend))) return response else: ctx['login_result'] = _('Your account has been banned!') return TemplateResponse(request,System_Config.get_template_name() + '/login.html',ctx) else: ctx['login_result'] = _('Your account name or password is incorrect.') return TemplateResponse(request,System_Config.get_template_name() + '/login.html',ctx)
def reset_password(request): ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = 'Reset Password' if request.method == 'GET': ctx['success_display'] = 'display:none;' ctx['form_display'] = '' try: #日期大小与比较要用 "日期字段名__gt=" 表示大于 reset_password = Reset_Password.objects.filter(expirt_time__gt=datetime.datetime.now()).get(email=request.GET['email'],validate_code=request.GET['validate_code'],is_active=True) ctx['email'] = reset_password.email ctx['validate_code'] = reset_password.validate_code return render(request,System_Config.get_template_name() + '/reset_password.html',ctx) except: raise Http404 #ctx['form_display'] = 'none' #ctx['reset_message'] = _('Can not find the password reset apply request.') else: try: reset_password = Reset_Password.objects.filter(expirt_time__gt=datetime.datetime.now()).get(email=request.POST['email'],validate_code=request.POST['validate_code'],is_active=True) myuser = MyUser.objects.get(email=reset_password.email) myuser.set_password(request.POST['password']) reset_password.is_active = False reset_password.save() myuser.save() ctx['success_display'] = '' ctx['form_display'] = 'display:none;' ctx['reset_message'] = _('The password has been reseted.') except: ctx['success_display'] = '' ctx['form_display'] = 'display:none;' ctx['reset_message'] = _('Opration faild.') return render(request,System_Config.get_template_name() + '/reset_password.html',ctx)
def forget_password(request): ctx = {} ctx['system_para'] = get_system_parameters() ctx['menu_products'] = get_menu_products() ctx['page_name'] = 'Forget Password' ctx = add_captcha(ctx) #添加验证码 if request.method == 'GET': ctx['form_display'] = '' ctx['success_display'] = 'display:none;' return render(request,System_Config.get_template_name() + '/forget_password.html',ctx) else: form = captcha_form(request.POST) # 获取Post表单数据 if form.is_valid(): ctx['form_display'] = 'display:none;' ctx.update(csrf(request)) s_uuid = str(uuid.uuid4()) reset_password = Reset_Password.objects.create(email=request.POST['email'],validate_code=s_uuid,apply_time=datetime.datetime.now(),expirt_time=(datetime.datetime.now() + datetime.timedelta(hours=24)),is_active=True) mail_ctx = {} mail_ctx['reset_url'] = System_Config.get_base_url() + "/user/reset-password?email=" + reset_password.email + "&validate_code=" + reset_password.validate_code my_send_mail(useage='reset_password',ctx=mail_ctx,send_to=reset_password.email,title=_('You are resetting you password in %(site_name)s .') % {'site_name':System_Config.objects.get(name='site_name').val}) ctx['apply_message'] = _('If there is an account associated with %(email_address)s you will receive an email with a link to reset your password.') % {'email_address':reset_password.email} ctx['success_display'] = '' else: ctx['apply_message'] = _('Please check your verify code.') return render(request,System_Config.get_template_name() + '/forget_password.html',ctx)
def login(request): ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = 'Login' ctx = add_captcha(ctx) #添加验证码 if request.method == 'GET': #GET请求,直接返回页面 if 'next' in request.GET: ctx['next'] = request.GET['next'] return render(request,System_Config.get_template_name() + '/login.html',ctx) else: ctx.update(csrf(request)) form = captcha_form(request.POST) # 获取Post表单数据 if 'next' in request.POST: next = request.POST['next'] ctx['next'] = next #if form.is_valid():# 验证表单,会自动验证验证码,(新版不要验证码了) myuser = auth.authenticate(username = request.POST['email'].lower(), password = request.POST['password']) if myuser is not None: auth.login(request,myuser) mycart = merge_cart(request) redirect_url = reverse('product_view_list') if 'next' in request.POST: if len(request.POST['next']) > 0: redirect_url = request.POST['next'] response = redirect(redirect_url) response.set_cookie('cart_id',mycart.id) response.set_cookie('imycartuser',myuser.email) return response else: ctx['login_result'] = _('Your account name or password is incorrect.') return render(request,System_Config.get_template_name() + '/login.html',ctx)
def __init__(self,timestamp,nonce,echostr,signature): self.ret = { 'app_id':System_Config.objects.get(name='wechat_app_id').val, 'timestamp':timestamp, 'nonce':nonce, 'echostr':echostr, 'token':System_Config.objects.get(name='wechat_token').val, 'signature':signature, 'wechat_api_url':System_Config.get(name='wechat_api_url').val, 'wechat_api_port':System_Config.get(name='wechat_api_port').val }
def detail(request,id): ctx = {} ctx['system_para'] = get_system_parameters() ctx['menu_products'] = get_menu_products() ctx['page_name'] = 'Blog' try: article = Article.objects.get(id=id) except: raise Http404 ctx['article'] = article template = '/article.html' if article.detail_template != '': if article.detail_template != 'USE_DEFAULT': template = '/custmize/' + article.detail_template logger.info('The template name is %s' % template) if request.method =='GET': #正常访问,返回动态页面 return render(request,System_Config.get_template_name() + template, ctx) elif request.method == 'POST':#通过ajax访问,生成静态文件 content = render_to_string(System_Config.get_template_name() + template, ctx) result_dict = {} try: import codecs,os dir = 'www/' + article.folder dir_http = article.folder if not os.path.exists(dir): os.makedirs(dir) if not dir.endswith('/'): dir = dir + '/' if not dir_http.endswith('/'): dir_http = dir_http + '/' f = codecs.open(dir + article.static_file_name ,'w','utf-8') f.write(content) f.close() result_dict['success'] = True result_dict['message'] = _('File already generated.') result_dict['static_url'] = dir_http + article.static_file_name except Exception as err: logger.error('写文件失败。' + str(err)) result_dict['success'] = False result_dict['message'] = _('File generate failed.') finally: if f is not None: f.close() return JsonResponse(result_dict)
def place_order(request): logger.info('Start to place order.') ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = 'Place Order' if request.method == 'POST': logger.debug('address_id:' + str(request.POST['address_id'])) try: address = Address.objects.get(id=request.POST['address_id']) except: ctx['order_result'] = _('Address is not correct') return render(request,System_Config.get_template_name() + '/order_result.html',ctx) if address not in request.user.addresses.all(): #如果这个地址不是这个用户的,报错 ctx['order_result'] = 'System Error.Please try again.' return render(request,System_Config.get_template_name() + '/order_result.html',ctx) #金额 sub_total,shipping,discount,total,remark = request.POST['sub_total'],request.POST['shipping'],request.POST['discount'],request.POST['total'],request.POST['remark'] logger.debug('>>>>>0:sub_total=' + str(sub_total)) #生成主订单 logger.debug('>>>>>1') order = Order.objects.create(order_number=get_serial_number(),user=request.user,status=Order.ORDER_STATUS_PLACE_ORDER,country=address.country,province=address.province,city=address.city,district=address.district,address_line_1=address.address_line_1, address_line_2=address.address_line_2,first_name=address.first_name,last_name=address.last_name,zipcode=address.zipcode,tel=address.tel,mobile=address.mobile,email=request.user.email, products_amount = sub_total,shipping_fee=shipping,discount=discount,order_amount=total,to_seller=remark) logger.debug('>>>>>2:order.id='+str(order.id)) cart_product_id = request.POST.getlist('cart_product_id',[]) logger.debug('>>>>>3:cart_product_id='+str(cart_product_id)) #计算汇总金额 amount_to_check = 0.00 for cp_id in cart_product_id: cp = Cart_Products.objects.get(id=cp_id) amount_to_check = amount_to_check + cp.get_total() #向主订单加入商品 logger.debug('>>>>>5:product.id='+str(cp.product.id)) op = Order_Products.objects.create(product_id=cp.product.id,product_attribute=cp.product_attribute,order=order,name=cp.product.name,short_desc=cp.product.short_desc,price=cp.get_product_price(), thumb=cp.product.thumb,image=cp.product.image,quantity=cp.quantity) logger.debug('>>>>>6:op.id='+str(op.id)) #删除购物车中商品 cp.delete() logger.debug('>>>>>8:cp.delete') #TODO:校验总金额是否正确,不正确则抛出异常 logger.debug('>>>>>9:amount_to_check=' + str(amount_to_check)) if abs(amount_to_check-float(sub_total)) > 0.01: #浮点数比较,没法直接用 == raise Exception('System error.Please try again.') return redirect('/cart/payment/' + str(order.id))
def handle_uploaded_file(f,type='other',product_sn='-1'): file_name = "" file_names = {} if not type.endswith('/'): type += '/' if not product_sn.endswith('/'): product_sn += '/' destination = None try: path = 'media/' + type + product_sn import os if not os.path.exists(path): os.makedirs(path) ext = f.name.split('.')[-1] logger.debug(str(ext)) #允许上传的类型 file_allow = ['JPG','JPEG','PNG','GIF'] if ext.upper() not in file_allow: raise Exception('%s File type is not allowed to upload.' % [ext]) random_name = str(uuid.uuid1()) file_name = path + random_name + '.' + ext file_thumb_name = path + random_name + '-thumb' + '.' + ext destination = open(file_name, 'wb+') logger.debug('file_name: %s' % file_name) for chunk in f.chunks(): destination.write(chunk) destination.close() result = thumbnail(file_name,file_thumb_name) if not result: raise Exception('thumbnail failed.') else: file_names['image'] = file_name file_names['thumb'] = file_thumb_name file_names['image_url'] = System_Config.get_base_url() + '/' + file_name file_names['thumb_url'] = System_Config.get_base_url() + '/' + file_thumb_name except Exception as e: #pass logger.error(str(e)) finally: if destination: destination.close() return file_names
def edit(request): ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = '文章分类管理' if request.method == 'GET': id = request.GET.get('id', '') try: category = ArticleBusiCategory.objects.get(id=id) ctx['category'] = category except Exception as err: logger.error("Can not find ArticleBusiCategory which id is %s . \n Error message: %s" % (id, err)) # 加载自定义模板供选择 from .file import file_list template_list = file_list(System_Config.get_template_name('client') + '/custmize/', 'custmize_template_article_category') logger.debug('>>>>>>>>>>>>>>>>>>custmize_template_article_category: %s' % template_list) ctx['custmize_template'] = template_list return TemplateResponse(request, System_Config.get_template_name('admin') + '/article_busi_category_detail.html', ctx) elif request.method == 'POST': result = {} result['success'] = False result['message'] = '文章分类保存失败' category = None try: id = request.POST.get('id', '') category = ArticleBusiCategory.objects.get(id=id) except Exception as err: logger.info( 'Can not find ArticleBusiCategory which id is [%s]. Create one. \n Error Message: %s' % (id, err)) if category: form = article_busi_category_form(request.POST, instance=category) else: form = article_busi_category_form(request.POST) if form.is_valid(): category = form.save() result['success'] = True result['message'] = '文章分类保存成功' result['category_id'] = category.id return JsonResponse(result) else: raise Http404
def view_list(request): ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = 'Product' if request.method =='GET': product_list = None if 'sort_by' in request.GET: if 'direction' in request.GET: if 'desc' == request.GET['direction']: product_list = Product.objects.filter(is_publish=True).order_by(request.GET['sort_by']).reverse() else: product_list = Product.objects.filter(is_publish=True).order_by(request.GET['sort_by']) ctx['direction'] = request.GET['direction'] else: product_list = Product.objects.filter(is_publish=True).order_by(request.GET['sort_by']) else: logger.debug("all products") product_list = Product.objects.filter(is_publish=True) logger.debug("no sort_by") if 'page_size' in request.GET: page_size = request.GET['page_size'] else: try: page_size = int(System_Config.objects.get(name='product_page_size')) except: page_size = 12 product_list, page_range = my_pagination(request=request, queryset=product_list,display_amount=page_size) ctx['product_list'] = product_list ctx['page_range'] = page_range return render(request,System_Config.get_template_name() + '/product_list.html',ctx)
def list_view(request): ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = '招聘管理' if request.method == 'GET': all = Recruit.objects.all().order_by('-sort_order') page_size = get_page_size() count = len(all) recruit_list, page_range, current_page = my_pagination(request=request, queryset=all, display_amount=page_size) logger.debug('current_page:%s' % current_page) # 为页面准备分类的下拉列表 # from shopcart.myadmin.article_busi_category import get_all_category # busi_category_list = get_all_category() # logger.debug('busi_category_list : %s' % busi_category_list) # ctx['busi_category_list'] = busi_category_list ctx['recruit_list'] = recruit_list ctx['page_range'] = page_range ctx['page_size'] = page_size ctx['current_page'] = current_page ctx['recruit_count'] = count return TemplateResponse(request, System_Config.get_template_name('admin') + '/recruit_list.html', ctx) else: raise Http404
def detail(request, id=None): ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = '自定义URL管理' try: customize_url = CustomizeURL.objects.get(id=id) except Exception as err: logger.error("Can not find customize_url which id is %s" % id) raise Http404 if request.method == 'GET': ctx['customize_url'] = customize_url return TemplateResponse(request, System_Config.get_template_name('admin') + '/cust_url_detail.html', ctx) else: result = {} result['success'] = False result['message'] = '自定义URL保存失败' from shopcart.forms import customize_url_detail_form form = customize_url_detail_form(request.POST, instance=customize_url) if form.is_valid(): customize_url = form.save() result['success'] = True result['message'] = '自定义URL保存成功' return JsonResponse(result)
def list(request): ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = '文章分类管理' if request.method == 'GET': # category_list = ArticleBusiCategory.objects.all().order_by('-update_time') category_list = ArticleBusiCategory.objects.all().order_by('-sort_order') count = category_list.count() page_size = get_page_size() category_list, page_range, current_page = my_pagination(request=request, queryset=category_list, display_amount=page_size) ctx['category_list'] = category_list ctx['page_range'] = page_range ctx['page_size'] = page_size ctx['current_page'] = current_page ctx['count'] = count return TemplateResponse(request, System_Config.get_template_name('admin') + '/article_busi_category_list.html', ctx) elif request.method == 'POST': raise Http404 else: raise Http404
def detail(request, id): ctx = {} ctx['system_para'] = get_system_parameters() def get_all_top_menu(): top_menu_list = Menu.objects.filter(parent=None) return top_menu_list top_menu_list = get_all_top_menu() ctx['menu_list'] = top_menu_list if request.method == 'GET': try: try: recruit = Recruit.objects.get(id=id) ctx['recruit'] = recruit ctx['page_name'] = recruit.title except Exception as err: logger.error('找不到编号为 %s 。' % [id, ]) raise Http404 return TemplateResponse(request, System_Config.get_template_name() + '/recruit_detail.html', ctx) except Exception as err: logger.error("Can not find artice which id is %s . \n Error message: %s" % (id, err)) raise Http404 else: raise Http404
def payment(request,order_id): ctx = {} ctx['system_para'] = get_system_parameters() ctx['menu_products'] = get_menu_products() ctx['page_name'] = 'Payment' order = Order.objects.get(id=order_id) ctx['paypal_account'] = System_Config.objects.get(name='paypal_account').val ctx['item_name'] = 'Your order:' + str(order.order_number) + " in " + System_Config.objects.get(name='site_name').val ctx['custom'] = order.order_number #向paypal传送本地订单编号 ctx['amount'] = order.order_amount ctx['return_url'] = System_Config.objects.get(name='base_url').val + "/order/show/" ctx['cancel_url'] = System_Config.objects.get(name='base_url').val + "/order/show/" ctx['notify_url'] = System_Config.objects.get(name='base_url').val + reverse('paypal-ipn') ctx['cmd'] = '_xclick' ctx['currency_code'] = System_Config.objects.get(name='default_currency').val ctx['charset'] = 'utf-8' ctx['rm'] = '1' paypal_env = 'sandbox' try: paypal_env = System_Config.objects.get(name='paypal_env').val except: logger.info('"paypal_env" is not definded,use default value : "sandbox".Please set the system parameter paypal_env = live if you want to use the paypal live service.') if paypal_env == 'live': ctx['paypal_action_url'] = 'https://www.paypal.com/cgi-bin/websc' else: ctx['paypal_action_url'] = 'https://www.sandbox.paypal.com/cgi-bin/websc' return render(request,System_Config.get_template_name() + '/payment.html',ctx)
def info(request): ctx = {} ctx.update(csrf(request)) ctx['system_para'] = System_Para.get_default_system_parameters() if request.method == 'GET': #GET请求,直接返回页面 return render(request,System_Config.get_template_name() + '/user_info.html',ctx) else: logger.debug("Modify User Info") form = user_info_form(request.POST) # 获取Post表单数据 myuser = request.user if form.is_valid():# 验证表单 myuser.first_name = form.cleaned_data['first_name'] myuser.last_name = form.cleaned_data['last_name'] logger.debug(myuser.last_name) else: logger.debug('not validate') if 'changePassword' in request.POST: #需要更改密码 myuser.set_password(request.POST['password']) else: #不更改密码 logger.debug('not checked') myuser.save() return redirect('/user/info/?success=true')
def price_adjusment(request): result_dict = {} if request.method == 'POST': order_id = request.POST.get('order_id','') price = request.POST.get('price_adjusment','0') logger.debug('price_adjusment:%s' % price) try: order = Order.objects.get(id=order_id) price = float(price) except Exception as err: logger.error('Can not find order [%s] \n Error Message:%s' %(order_id,err)) result_dict['success'] = False result_dict['message'] = '价格调整失败' return JsonResponse(result_dict) order.price_adjusment = price order.calculate_total_price() order.save() result_dict['success'] = True result_dict['message'] = '价格调整成功' return JsonResponse(result_dict) else: ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = '价格调整' ctx['order_id'] = request.GET.get('order_id') return TemplateResponse(request,System_Config.get_template_name('admin') + '/order_price_adjusment.html',ctx)
def view_cart(request): if 'cart_id' in request.COOKIES: cart_id = request.COOKIES["cart_id"] cart, created = Cart.objects.get_or_create(id=cart_id) else: if request.user.is_authenticated(): cart, object = Cart.objects.get_or_create(user=request.user) else: cart = Cart.objects.create(user=None) if request.is_ajax(): ret_dict = {} ret_dict['success'] = True ret_dict['item_type_count'] = cart.cart_products.all().count() from shopcart.serializer import serializer # serialized_cart = serializer(cart,datetime_format='string',output_type='dict',many=True) # 先不返回购物车中商品信息 serialized_cart = serializer(cart, datetime_format='string', output_type='dict', many=False) # logger.debug(serialized_cart) ret_dict['cart'] = serialized_cart return JsonResponse(ret_dict) else: ctx = {} ctx['system_para'] = get_system_parameters() ctx['menu_products'] = get_menu_products() ctx['page_name'] = 'My Cart' if request.method == 'GET': ctx['cart'] = cart response = TemplateResponse(request, System_Config.get_template_name() + '/cart_detail.html', ctx) response.set_cookie('cart_id', cart.id, max_age=3600 * 24 * 365) return response
def view_blog_list(request): ctx = {} ctx['system_para'] = get_system_parameters() ctx['menu_products'] = get_menu_products() ctx['page_name'] = 'Blog' try: blog_list_page_size = System_Config.objects.get('blog_list_page_size') except: logger.debug('blog_list_page_size is not defined,use the default value 12.') blog_list_page_size = 12 if request.method =='GET': product_list = None if 'sort_by' in request.GET: if 'direction' in request.GET: if 'desc' == request.GET['direction']: article_list = Article.objects.filter(category=Article.ARTICLE_CATEGORY_BLOG).order_by(request.GET['sort_by']).reverse() else: article_list = Article.objects.filter(category=Article.ARTICLE_CATEGORY_BLOG).order_by(request.GET['sort_by']) else: article_list = Article.objects.filter(category=Article.ARTICLE_CATEGORY_BLOG).order_by(request.GET['sort_by']) else: article_list = Article.objects.filter(category=Article.ARTICLE_CATEGORY_BLOG) if 'page_size' in request.GET: logger.debug('the page_size has been detacted') article_list, page_range = my_pagination(request=request, queryset=article_list,display_amount=request.GET['page_size']) else: article_list, page_range = my_pagination(request=request, queryset=article_list,display_amount=blog_list_page_size) ctx['article_list'] = article_list ctx['page_range'] = page_range return render(request,System_Config.get_template_name() + '/blog_list.html',ctx)
def user_list(request): ctx = {} ctx['page_name'] = '用户管理' result_dict = {} result_dict['success'] = False result_dict['message'] = '用户信息保存失败' if request.method == 'GET': #user_list = MyUser.objects.filter(is_staff=False).filter(is_superuser=False).order_by('-update_time') #user_list = MyUser.objects.order_by('-update_time') user_list = MyUser.objects.order_by('-create_time') item_value = request.GET.get('item_value','') if item_value: from django.db.models import Q user_list = user_list.filter(Q(email__icontains=item_value)) count = len(user_list) page_size = get_page_size() user_list, page_range,current_page = my_pagination(request=request, queryset=user_list,display_amount=page_size) ctx['user_list'] = user_list ctx['page_range'] = page_range ctx['page_size'] = page_size ctx['current_page'] = current_page ctx['item_count'] = count return TemplateResponse(request,System_Config.get_template_name('admin') + '/user_list.html',ctx) else: raise Http404
def admin_edit(request): ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = '用户管理' result_dict = {} result_dict['success'] = False result_dict['message'] = '管理员管理操作失败' if request.method == 'POST': from shopcart.forms import register_form form = register_form(request.POST) if form.is_valid(): myuser = MyUser.objects.create_superuser(email=form.cleaned_data['email'].lower(),password=form.cleaned_data['password'],first_name=form.cleaned_data['first_name'],last_name=form.cleaned_data['last_name'],username=form.cleaned_data['email'].lower(),gender='1') myuser.is_superuser = True myuser.is_staff = True myuser.save() result_dict['success'] = True result_dict['message'] = '管理员管理操作成功' return JsonResponse(result_dict) elif request.method == 'GET': return TemplateResponse(request,System_Config.get_template_name('admin') + '/user_admin_detail.html',ctx) else: raise Http404
def view_index(request, tdk=None): ctx = {} ctx['system_para'] = get_system_parameters() ctx['menu_products'] = get_menu_products() def get_all_top_menu(): top_menu_list = Menu.objects.filter(parent=None) return top_menu_list top_menu_list = get_all_top_menu() ctx['menu_list'] = top_menu_list if not tdk: try: cust = CustomizeURL.objects.get(name='首页') if cust.is_customize_tdk: tdk = {} tdk['page_title'] = cust.page_name tdk['keywords'] = cust.keywords tdk['short_desc'] = cust.short_desc except Exception as err: tdk = None if tdk: customize_tdk(ctx, tdk) # from .oauth import SocialSites, SocialAPIError # socialsites = SocialSites() # s = socialsites.get_site_object_by_name('facebook') # ctx['oauth'] = s.authorize_url # 判断网站服务是否到期 maturity_data = System_Config.objects.get(name='maturity_data').val # 获取到期时间 new_maturity_data = time.strptime(maturity_data, "%Y-%m-%d %H:%M:%S") # 转化为时间戳 new_maturity_data_time = time.mktime(new_maturity_data) now_time = int(time.time()) # 获取当前时间 if now_time - new_maturity_data_time >= 0: return TemplateResponse(request, System_Config.get_template_name() + '/index_error.html', ctx) else: return TemplateResponse(request, System_Config.get_template_name() + '/index.html', ctx)
def register(request): ctx = {} ctx.update(csrf(request)) ctx['system_para'] = get_system_parameters() ctx['page_name'] = 'Regitser' ctx = add_captcha(ctx) #添加验证码 logger.debug('Enter register function.') if request.method == 'GET': #GET请求,直接返回页面 return render(request,System_Config.get_template_name() + '/register.html',ctx) else: form = register_form(request.POST) # 获取Post表单数据 if form.is_valid():# 验证表单 myuser = MyUser.objects.create_user(username=None,email=form.cleaned_data['email'].lower(),password=form.cleaned_data['password'],first_name=form.cleaned_data['first_name'],last_name=form.cleaned_data['last_name']) return redirect('/user/login') else: logger.error('form is not valid') ctx['reg_result'] = _('Registration faild.') return render(request,System_Config.get_template_name() + '/register.html',ctx)
def view_wishlist(request): ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = 'My Wishlist' if request.method =='GET': wish_list = Wish.objects.filter(user=request.user) wish_list, page_range = my_pagination(request, wish_list,display_amount=5) ctx['wish_list'] = wish_list ctx['page_range'] = page_range return render(request,System_Config.get_template_name() + '/wish_list.html',ctx)
def address_list(request): ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = 'Address Book' if request.method=='GET': myuser = request.user address_list = Address.objects.filter(user=myuser) ctx['address_list'] = address_list return render(request,System_Config.get_template_name() + '/address.html',ctx) else: raise Http404
def detail(request,id=None): ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = 'Order Detail' try: order = Order.objects.get(id=id) except Exception as err: logger.error("Can not find order which id is %s" % id) raise Http404 ctx['order'] = order return TemplateResponse(request,System_Config.get_template_name('admin') + '/order_detail.html',ctx)
def file_upload(request,item_type,item_id): ctx = {} ctx['system_para'] = System_Para.get_default_system_parameters() ctx['action_url'] = '/file-upload/' + item_type + '/' + item_id + "/" ctx['file_delete_url'] = '/file-delete/' + item_type ctx['host_item_id'] = item_id if request.method == 'GET': if item_type == 'product' or item_type == 'product_album': try: item = Product.objects.get(id=item_id) ctx['item'] = item try: ctx['image_list'] = Product_Images.objects.filter(product=item).order_by('create_time').reverse() if item_type == 'product_album': ctx['image_list'] = Album.objects.filter(item_type=item_type,item_id=item.id).order_by('create_time').reverse() except: ctx['image_list'] = [] except: raise Http404 elif item_type == 'article': raise Http404 else: raise Http404 return render(request,System_Config.get_template_name() + '/file_upload.html',ctx) else: if item_type == 'product' or item_type == 'product_album': try: item = Product.objects.get(id=item_id) except: raise Http404 filenames = handle_uploaded_file(request.FILES['upload'],item_type,item_id) #加入到对象的图片列表中去 if item_type == 'product': pi = Product_Images.objects.create(image=filenames['image_url'],thumb=filenames['thumb_url'],product=item) else: ai = Album.objects.create(image=filenames['image_url'],thumb=filenames['thumb_url'],item_type=item_type,item_id=item.id) elif item_type == 'article': try: item = Article.objects.get(id=item_id) except: raise Http404 filenames = handle_uploaded_file(request.FILES['upload'],item_type,item_id) ai = Album.objects.create(image=filenames['image_url'],thumb=filenames['thumb_url'],item_type=item_type,item_id=item.id) else: raise Http404 #判断是否是从CKEDITER传上来的 if 'CKEditorFuncNum' in request.GET: logger.debug('请求来自CKEDITER.') script = '<script type=\"text/javascript\">window.parent.CKEDITOR.tools.callFunction("' + request.GET['CKEditorFuncNum'] + '","' + filenames['image_url'] + '");</script>'; logger.debug('返回的script: %s' % [script]) return HttpResponse(script,content_type='text/html;charset=UTF-8') return redirect('/file-upload/' + item_type + '/' + item_id + "/")
def order_detail(request,id): ctx = {} ctx['system_para'] = get_system_parameters() ctx['menu_products'] = get_menu_products() ctx['page_name'] = 'My Orders' if request.method == 'GET': try: order = Order.objects.get(id=id) except Exception as err: logger.error('Can not find order %s' % (id)) raise Http404 ctx['order'] = order return render(request,System_Config.get_template_name() + '/order_view.html',ctx)
def file_upload(request, item_type, item_id): ctx = {} ctx['action_url'] = '/admin/file-upload/' + item_type + '/' + item_id + "/" ctx['file_delete_url'] = '/file-delete/' + item_type ctx['host_item_id'] = item_id if request.method == 'GET': ctx['item_type'] = item_type ctx['extra_info'] = request.GET.get('extra-info') return TemplateResponse( request, System_Config.get_template_name('admin') + '/file_upload.html', ctx) else: ctx['result_message'] = '文件上传成功' result_extra = {} ctx['result_extra'] = json.dumps(result_extra) manual_name = request.POST.get('manual_name', 'noname') same_name_handle = request.POST.get('same_name_handle', 'reject') alt_value = request.POST.get('alt_value', '') filename_type = request.POST.get('filename_type', 'random') href = request.POST.get('href', '') sort = request.POST.get('sort', '0') extra_info = request.POST.get('extra_info', '') #长度和高度的限制,给自动缩放用,自动缩放是否启用,没有配置,默认为不缩放,或者最长边不超过1280 if item_type == 'product' or item_type == 'product_album': try: item = Product.objects.get(id=item_id) except: raise Http404 logger.debug("filename_type:%s" % filename_type) filenames = handle_uploaded_file(request.FILES['upload'], item_type, item_id, filename_type, manual_name, same_name_handle, get_scale_para('product')) if filenames['upload_result'] == False: ctx['result_message'] = filenames['upload_error_msg'] return TemplateResponse( request, System_Config.get_template_name('admin') + '/file_upload.html', ctx) # return HttpResponse(filenames['upload_error_msg']) real_name = filenames['real_name'] thumb_name = filenames['real_thumb'] file_path = filenames['real_path'] # 加入到对象的图片列表中去 is_show = request.POST.get('is_show_in_product_detail', False) if item_type == 'product': pi = Product_Images.objects.create( image=filenames['image_url'], thumb=filenames['thumb_url'], product=item, sort=sort, is_show_in_product_detail=is_show, alt_value=alt_value, file_name=real_name, thumb_name=thumb_name, path=file_path) ''' 如果改商品原来没有图片,则自动把第一张作为主图 ''' if not item.image: item.image = pi.image item.thumb = pi.thumb item.save() result_extra['img_id'] = pi.id else: ai = Album.objects.create(image=filenames['image_url'], thumb=filenames['thumb_url'], item_type=item_type, item_id=item.id, alt_value=alt_value, file_name=real_name, thumb_name=thumb_name, sort=sort, path=file_path) result_extra['img_id'] = ai.id elif item_type == 'article': try: item = Article.objects.get(id=item_id) except: raise Http404 filenames = handle_uploaded_file(request.FILES['upload'], item_type, item_id, filename_type, manual_name, same_name_handle, get_scale_para('article')) if filenames['upload_result'] == False: ctx['result_message'] = filenames['upload_error_msg'] return TemplateResponse( request, System_Config.get_template_name('admin') + '/file_upload.html', ctx) real_name = filenames['real_name'] thumb_name = filenames['real_thumb'] file_path = filenames['real_path'] logger.debug('Upload success!!!') ai = Album.objects.create(image=filenames['image_url'], thumb=filenames['thumb_url'], item_type=item_type, item_id=item.id, alt_value=alt_value, file_name=real_name, thumb_name=thumb_name, sort=sort, path=file_path) ''' 如果改文章原来没有图片,则自动把第一张作为主图 ''' if not item.image: item.image = ai.image item.thumb = ai.thumb item.save() result_extra['img_id'] = ai.id logger.debug('ai success!!!') elif item_type == 'attribute': try: item = Attribute_Group.objects.get(id=item_id) except: raise Http404 filenames = handle_uploaded_file(request.FILES['upload'], item_type, item_id, request.POST['filename_type'], manual_name, same_name_handle, get_scale_para('attribute')) if filenames['upload_result'] == False: ctx['result_message'] = filenames['upload_error_msg'] return TemplateResponse( request, System_Config.get_template_name('admin') + '/file_upload.html', ctx) real_name = filenames['real_name'] thumb_name = filenames['real_thumb'] file_path = filenames['real_path'] ai = Album.objects.create(image=filenames['image_url'], thumb=filenames['thumb_url'], item_type=item_type, item_id=item.id, alt_value=alt_value, file_name=real_name, thumb_name=thumb_name, sort=sort, path=file_path) result_extra['img_id'] = ai.id logger.info('Attribute_Group image upload success') elif item_type == 'slider': try: item = Slider.objects.get(id=item_id) except: raise Http404 filenames = handle_uploaded_file(request.FILES['upload'], item_type, item_id, request.POST['filename_type'], manual_name, same_name_handle, get_scale_para('slider')) if filenames['upload_result'] == False: ctx['result_message'] = filenames['upload_error_msg'] return TemplateResponse( request, System_Config.get_template_name('admin') + '/file_upload.html', ctx) real_name = filenames['real_name'] thumb_name = filenames['real_thumb'] file_path = filenames['real_path'] ai = Album.objects.create(image=filenames['image_url'], thumb=filenames['thumb_url'], item_type=item_type, item_id=item.id, alt_value=alt_value, href=href, file_name=real_name, thumb_name=thumb_name, sort=sort, path=file_path) result_extra['img_id'] = ai.id logger.info('Slider image upload success') elif item_type == 'attachment': try: item = Product.objects.get(id=item_id) except: raise Http404 logger.debug("filename_type:%s" % filename_type) upload = request.FILES.get('upload', None) upload2 = request.FILES.get('upload2', None) if not upload2: upload2 = upload filenames = handle_uploaded_attachment_file( upload, upload2, item_type, item_id, filename_type, manual_name, same_name_handle) if filenames['upload_result'] == False: ctx['result_message'] = filenames['upload_error_msg'] return TemplateResponse( request, System_Config.get_template_name('admin') + '/file_upload.html', ctx) real_name = filenames['real_name'] thumb_name = filenames['real_thumb'] file_path = filenames['real_path'] ai = Album.objects.create(image=filenames['image_url'], thumb=filenames['thumb_url'], item_type=item_type, item_id=item.id, alt_value=alt_value, file_name=real_name, thumb_name=thumb_name, sort=sort, path=file_path) result_extra['img_id'] = ai.id else: raise Http404 logger.info('come in') # 判断是否是从CKEDITER传上来的 if 'CKEditorFuncNum' in request.GET: logger.info('从CKEDITER') logger.debug('请求来自CKEDITER.') script = '<script type=\"text/javascript\">window.parent.CKEDITOR.tools.callFunction("' + request.GET[ 'CKEditorFuncNum'] + '","' + filenames[ 'image_url'] + '");</script>' logger.debug('返回的script: %s' % [script]) return HttpResponse(script, content_type='text/html;charset=UTF-8') return_url = '/admin/file-upload/' + item_type + '/' + item_id + "/" if 'return_url' in request.POST: return_url = request.POST.get('return_url') return redirect(return_url) result_extra['extra_info'] = extra_info ctx['result_extra'] = json.dumps(result_extra) return TemplateResponse( request, System_Config.get_template_name('admin') + '/file_upload.html', ctx)
def handle_uploaded_file(f, type='other', product_sn='-1', file_name_type='random', manual_name='noname', same_name_handle='reject'): file_name = "" file_names = {} if not type.endswith('/'): type += '/' if not product_sn.endswith('/'): product_sn += '/' destination = None try: path = 'media/' + type + product_sn import os if not os.path.exists(path): os.makedirs(path) ext = f.name.split('.')[-1] logger.debug('filename origin:' + str(f.name)) logger.debug(str(ext)) #允许上传的类型 file_allow = ['JPG', 'JPEG', 'PNG', 'GIF'] if ext.upper() not in file_allow: raise Exception('%s File type is not allowed to upload.' % [ext]) #20160616,koala加入对文件名生成的生成规则 real_name = '' real_thumb = '' real_path = path if file_name_type == 'random': random_name = str(uuid.uuid1()) file_name = path + random_name + '.' + ext file_thumb_name = path + random_name + '-thumb' + '.' + ext real_name = random_name + '.' + ext real_thumb = random_name + '-thumb' + '.' + ext elif file_name_type == 'origin': file_name = path + f.name name_list_tmp = f.name.split('.') length = len(name_list_tmp) name_list_tmp[length - 2] = name_list_tmp[length - 2] + '-thumb' file_thumb_name = path + '.'.join(name_list_tmp) real_name = f.name real_thumb = '.'.join(name_list_tmp) elif file_name_type == 'manual': file_name = path + manual_name + '.' + ext file_thumb_name = path + manual_name + '-thumb' + '.' + ext real_name = manual_name + '.' + ext real_thumb = manual_name + '-thumb' + '.' + ext else: raise Exception('file upload failed') logger.info('real_name : %s , real_thumb : %s' % (real_name, real_thumb)) # 判断文件是否已经存在 if os.path.exists(file_name): if same_name_handle == 'reject': file_names['upload_result'] = False file_names['upload_error_msg'] = 'File already exists.' raise Exception('File already exists.') elif same_name_handle == 'rewrite': #覆盖,无需处理 pass else: raise Exception('No such method: %s' % same_name_handle) destination = open(file_name, 'wb+') logger.debug('file_name: %s' % file_name) for chunk in f.chunks(): destination.write(chunk) destination.close() result = thumbnail(file_name, file_thumb_name) if not result: file_names['upload_result'] = False file_names['upload_error_msg'] = 'Thumbnail failed.' raise Exception('Thumbnail failed.') else: file_names['upload_result'] = True file_names['image'] = file_name file_names['thumb'] = file_thumb_name file_names['real_name'] = real_name file_names['real_thumb'] = real_thumb file_names['real_path'] = real_path file_names['image_url'] = System_Config.get_base_url( ) + '/' + file_name file_names['thumb_url'] = System_Config.get_base_url( ) + '/' + file_thumb_name except Exception as e: #pass logger.error(str(e)) finally: if destination: destination.close() return file_names
def recruit_basic_edit(request): ctx = {} result = {} result['success'] = False result['message'] = '' result['data'] = {} if request.method == 'GET': ctx = {} result = {} result['success'] = False result['message'] = '' result['data'] = {} id = request.GET.get('id', '') logger.debug('获取ID %s' % id) if id != '': try: recruit = Recruit.objects.get(id=id) ctx['recruit'] = recruit except Exception as err: logger.error('Can not find article which id is %s. The error message is %s' % (id, err)) return TemplateResponse(request, System_Config.get_template_name('admin') + '/recruit_detail.html', ctx) elif request.method == 'POST': try: recruit = Recruit.objects.get(id=request.POST['id']) logger.debug('获取recruit %s' % recruit) form = recruit_basic_info_form(request.POST, instance=recruit) except: recruit = None form = recruit_basic_info_form(request.POST) logger.info('New recruit to store.') if form.is_valid(): # 判断自定义文件名是否重复 url = form.cleaned_data['static_file_name'] if url: try: a = Recruit.objects.get(static_file_name=url) except Exception as err: a = None if a and a != recruit: # 能找到,说明重名了 result['success'] = False result['message'] = '自定义URL与%s重复!' % a.title return JsonResponse(result) recruit = form.save() logger.info('招聘文章保存成功') result['success'] = True result['message'] = '招聘文章保存成功' data = {} data['recruit_id'] = recruit.id result['data'] = data else: result['success'] = False result['message'] = '招聘文章保存失败' result['data'] = {} return JsonResponse(result) else: raise Http404
def detail(request,id): ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = 'Product' try: product = Product.objects.get(id=id) except Exception as err: logger.error('找不到编号为 %s 的商品。' % [id,]) raise Http404 #由于存在外键关系,只需要查出product对象,product所关联的images可以在模板中用product.images.all获得。 ctx['product'] = product price_min = product.price price_max = product.price for attribut in product.attributes.all(): if attribut.price_adjusment > 0: if attribut.price_adjusment + product.price > price_max: price_max = attribut.price_adjusment + product.price else: if product.price + attribut.price_adjusment < price_min: price_min = product.price + attribut.price_adjusment ctx['price_min'] = price_min ctx['price_max'] = price_max if price_max - price_min < 0.01: ctx['has_price_range'] = False else: ctx['has_price_range'] = True if request.method =='GET': #正常访问,返回动态页面 #检查商品是否已经加入了用户的愿望清单 if request.user.is_authenticated(): wish_list = request.user.wishs.all() for wish in wish_list: if product == wish.product: logger.debug('The product which id is %s has been added to user\'s wishlist.' % (product.id)) ctx['is_my_wish'] = True return render(request,System_Config.get_template_name() + '/product_detail.html', ctx) elif request.method == 'POST':#通过ajax访问,生成静态文件 content = render_to_string(System_Config.get_template_name() + '/product_detail.html', ctx) result_dict = {} try: import codecs,os #先获取商品所属分类,作为目录 category_list = product.categorys.all() f = None for cat in category_list: dir = 'media/' + cat.get_dirs() if not os.path.exists(dir): os.makedirs(dir) f = codecs.open(dir + product.static_file_name ,'w','utf-8') f.write(content) f.close() result_dict['success'] = True result_dict['message'] = _('File already generated.') result_dict['static_url'] = dir + product.static_file_name except Exception as err: logger.error('写文件失败。' + str(err)) result_dict['success'] = False result_dict['message'] = _('File generate failed.') finally: if f is not None: f.close() return JsonResponse(result_dict)
def view_list(request, category_id=None): ctx = {} ctx['system_para'] = get_system_parameters() ctx['menu_products'] = get_menu_products() ctx['page_name'] = 'Product' template = '/product_list.html' logger.debug('Parameters in request:%s' % request.GET) if request.method == 'GET': product_list = None sort_by = None reverse = False if 'direction' in request.GET: direction = request.GET['direction'] if 'asc' == direction: reverse = True else: reverse = False if 'sort_by' in request.GET: sort_by = request.GET['sort_by'] if not reverse: logger.debug('desc') product_list = Product.objects.filter( is_publish=True).order_by(request.GET['sort_by']) else: logger.debug('asc') product_list = Product.objects.filter( is_publish=True).order_by( request.GET['sort_by']).reverse() ctx['direction'] = request.GET['direction'] else: logger.debug("all products") if not reverse: order_by = '-sort_order' else: order_by = 'sort_order' product_list = Product.objects.filter( is_publish=True).order_by(order_by) logger.debug('Products count in product_list : [%s]' % len(product_list)) #按分类筛选 logger.debug('category_id : %s ' % category_id) if category_id: #查找该分类是否设置了自定义的分类模板 try: category = Category.objects.get(id=category_id) from .category import get_all_children cat_list = get_all_children(category, []) logger.debug('cat_list: %s' % cat_list) ctx['page_key_words'] = category.keywords ctx['page_description'] = category.short_desc if category.page_title: ctx['page_name'] = category.page_title else: ctx['page_name'] = category.name if category.category_template: template = '/custmize/category/' + category.category_template product_list = product_list.filter(categorys__in=cat_list) product_list = list(set(product_list)) #product_list = sorted(product_list,key= lambda product:product.update_time,reverse=True) if sort_by == 'create_time': product_list = sorted( product_list, key=lambda product: product.create_time, reverse=reverse) elif sort_by == 'market_price': product_list = sorted( product_list, key=lambda product: product.market_price, reverse=reverse) elif sort_by == 'name': product_list = sorted(product_list, key=lambda product: product.name, reverse=reverse) else: product_list = sorted( product_list, key=lambda product: product.sort_order, reverse=reverse) logger.debug('Products count in product_list : [%s]' % len(product_list)) ctx['category'] = category except Exception as err: logger.error( 'Can not find category which id is %s. Error message is %s ' % (category_id, err)) #设置分类专用的标题和描述 ctx['category_title'] = category.name ctx['category_desc'] = category.description if 'page_size' in request.GET: page_size = request.GET['page_size'] else: try: page_size = int( System_Config.objects.get(name='product_page_size').val) except: page_size = 12 product_list, page_range = my_pagination(request=request, queryset=product_list, display_amount=page_size) ctx['product_list'] = product_list ctx['page_range'] = page_range return TemplateResponse(request, System_Config.get_template_name() + template, ctx)
def place_order(request): logger.info('Start to place order.') ctx = {} ctx['system_para'] = get_system_parameters() ctx['menu_products'] = get_menu_products() ctx['page_name'] = 'Place Order' if request.method == 'POST': logger.debug('address_id:' + str(request.POST['address_id'])) try: address = Address.objects.get(id=request.POST['address_id']) except: ctx['content'] = _('Address is not correct') return TemplateResponse( request, System_Config.get_template_name() + '/info_show.html', ctx) if address not in request.user.addresses.all(): #如果这个地址不是这个用户的,报错 ctx['content'] = 'System Error.Please try again.' return TemplateResponse( request, System_Config.get_template_name() + '/info_show.html', ctx) #金额 sub_total, shipping, discount, total, remark, express_type = request.POST[ 'sub_total'], request.POST['shipping'], request.POST[ 'discount'], request.POST['total'], request.POST[ 'remark'], request.POST['express'] promotion_code = request.POST.get('promotion_code') cart_product_id = request.POST.getlist('cart_product_id', []) #logger.debug('>>>>>0:sub_total=' + str(sub_total)) try: express = ExpressType.objects.get(id=express_type) except Exception as err: logger.error('Can not find express_type %s. \n Error Message:%s' % (express_type, err)) ctx['content'] = 'System Error.Please try again.' return TemplateResponse( request, System_Config.get_template_name() + '/info_show.html', ctx) from .cart import get_prices prices, promotion = get_prices(cart_product_id_list=cart_product_id, express_type=express, discount_code=promotion_code) if abs(float(shipping) - float(prices['shipping'])) > 0.01: logger.error( 'Amount shipping check faild! Amount in client is [%s],but the server need [%s].' % (shipping, prices['shipping'])) raise Exception('System error.Please try again.') if abs(float(discount) - float(prices['discount'])) > 0.01: logger.error( 'Amount discount check faild! Amount in client is [%s],but the server need [%s].' % (discount, prices['discount'])) raise Exception('System error.Please try again.') if abs(float(total) - float(prices['total'])) > 0.01: logger.error( 'Amount total check faild! Amount in client is [%s],but the server need [%s].' % (total, prices['total'])) raise Exception('System error.Please try again.') logger.info('Amount check success!') #生成主订单 #logger.debug('>>>>>1') order = Order.objects.create(order_number=get_serial_number(), user=request.user, status=Order.ORDER_STATUS_PLACE_ORDER, country=address.country, province=address.province, city=address.city, district=address.district, address_line_1=address.address_line_1, address_line_2=address.address_line_2, first_name=address.first_name, last_name=address.last_name, zipcode=address.zipcode, tel=address.tel, mobile=address.mobile, email=request.user.email, products_amount=sub_total, shipping_fee=shipping, discount=discount, order_amount=total, to_seller=remark, express_type_name=express.name, promotion_code=promotion_code) for cp_id in cart_product_id: cp = Cart_Products.objects.get(id=cp_id) #amount_to_check = amount_to_check + cp.get_total() #向主订单加入商品 #logger.debug('>>>>>5:product.id='+str(cp.product.id)) pa_id = None pa_name = '' pa_item_number = None if cp.product_attribute: pa_id = cp.product_attribute.id pa_name = cp.product_attribute.get_grouped_attribute_desc() pa_item_number = cp.product_attribute.sub_item_number op = Order_Products.objects.create( product_id=cp.product.id, product_attribute_id=pa_id, order=order, name=cp.product.name, short_desc=cp.product.short_desc, price=cp.get_product_price(), thumb=cp.product.thumb, image=cp.product.image, quantity=cp.quantity, product_attribute_name=pa_name, product_attribute_item_number=pa_item_number) #logger.debug('>>>>>6:op.id='+str(op.id)) # 20160614,考拉,加入了扣减库存的逻辑 if cp.product_attribute: product_attribute = cp.product_attribute product_attribute.quantity = product_attribute.quantity - cp.quantity if product_attribute.quantity < 0: ctx['content'] = 'The product "%s" is sold out.' % product_attribute.product.name ctx['backurl'] = '/cart/show/' return TemplateResponse( request, System_Config.get_template_name() + '/info_show.html', ctx) #raise Exception('The product "%s" is sold out.' % product_attribute.product.name) product_attribute.save() else: product = cp.product product.quantity = product.quantity - cp.quantity if product.quantity < 0: ctx['content'] = 'The product "%s" is sold out.' % product.name ctx['backurl'] = '/cart/show/' return TemplateResponse( request, System_Config.get_template_name() + '/info_show.html', ctx) #raise Exception('The product "%s" is sold out.' % product.name) product.save() #删除购物车中商品 cp.delete() #logger.debug('>>>>>8:cp.delete') return redirect('/cart/payment/' + str(order.id))
def detail(request, id): ctx = {} ctx['system_para'] = get_system_parameters() ctx['menu_products'] = get_menu_products() ctx['page_name'] = 'Product' try: product = Product.objects.get(id=id) except Exception as err: logger.error('找不到编号为 %s 的商品。' % [ id, ]) raise Http404 #由于存在外键关系,只需要查出product对象,product所关联的images可以在模板中用product.images.all获得。 ctx['product'] = product ctx['page_key_words'] = product.keywords ctx['page_description'] = product.short_desc if product.page_title: ctx['page_name'] = product.page_title else: ctx['page_name'] = product.name '''价格规则改成判断数量了,这段暂时不要 price_min = product.price price_max = product.price for attribut in product.attributes.all(): if attribut.price_adjusment > 0: if attribut.price_adjusment + product.price > price_max: price_max = attribut.price_adjusment + product.price else: if product.price + attribut.price_adjusment < price_min: price_min = product.price + attribut.price_adjusment ctx['price_min'] = price_min ctx['price_max'] = price_max if product.get_max_price_max - price_min < 0.01: ctx['has_price_range'] = False else: ctx['has_price_range'] = True ''' if request.method == 'GET': #正常访问,返回动态页面 #检查商品是否已经加入了用户的愿望清单 if request.user.is_authenticated(): wish_list = request.user.wishs.all() for wish in wish_list: if product == wish.product: logger.debug( 'The product which id is %s has been added to user\'s wishlist.' % (product.id)) ctx['is_my_wish'] = True #获取特定的模板,先判断商品是否设置了模板,没有则判断商品所在的分类是否设置了指定模板,都没有,则使用系统统一模板 template = '/product_detail.html' if product.categorys.count() > 0: cat = product.categorys.all()[0] if cat.detail_template != '': template = '/custmize/product/' + cat.detail_template if product.detail_template != '': if product.detail_template.upper() == 'USE_DEFAULT': #强行指定用默认模板 template = '/product_detail.html' else: template = '/custmize/product/' + product.detail_template return TemplateResponse(request, System_Config.get_template_name() + template, ctx) elif request.method == 'POST': #通过ajax访问,生成静态文件 content = render_to_string( System_Config.get_template_name() + '/product_detail.html', ctx) result_dict = {} try: import codecs, os #先获取商品所属分类,作为目录 category_list = product.categorys.all() f = None dir = '' for cat in category_list: dir = 'www/' + cat.get_dirs() dir_http = cat.get_dirs() if not os.path.exists(dir): os.makedirs(dir) f = codecs.open(dir + product.static_file_name, 'w', 'utf-8') f.write(content) f.close() result_dict['success'] = True result_dict['message'] = _('File already generated.') result_dict['static_url'] = dir_http + product.static_file_name except Exception as err: logger.error('写文件失败。' + str(err)) result_dict['success'] = False result_dict['message'] = _('File generate failed.') finally: if f is not None: f.close() return JsonResponse(result_dict)
def list_view(request): ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = '文章管理' if request.method == 'GET': type = request.GET.get('type', '') ctx['type'] = type # 默认只查询博客文章 if not type: type = '0' query_item = request.GET.get('query_item', '') ctx['query_item'] = query_item logger.debug('query item : %s' % query_item) item_value = request.GET.get('item_value', '') ctx['item_value'] = item_value logger.debug('item_value : %s' % item_value) query_busi_category = request.GET.get('query_busi_category', '') ctx['query_busi_category_id'] = query_busi_category try: busi_cat = ArticleBusiCategory.objects.get(id=query_busi_category) ctx['query_busi_category_name'] = busi_cat.name except: ctx['query_busi_category_name'] = '' logger.debug('query_busi_category : %s' % query_busi_category) # all = Article.objects.all().order_by('-update_time') all = Article.objects.all().order_by('-sort_order') if type: all = all.filter(category=type) if query_item == 'title': if item_value: from django.db.models import Q all = all.filter(Q(title__icontains=item_value)) if query_busi_category: all = all.filter(busi_category=query_busi_category) page_size = get_page_size() count = len(all) artile_list, page_range, current_page = my_pagination( request=request, queryset=all, display_amount=page_size) logger.debug('current_page:%s' % current_page) # 为页面准备分类的下拉列表 from shopcart.myadmin.article_busi_category import get_all_category busi_category_list = get_all_category() logger.debug('busi_category_list : %s' % busi_category_list) ctx['busi_category_list'] = busi_category_list ctx['article_list'] = artile_list ctx['page_range'] = page_range ctx['page_size'] = page_size ctx['current_page'] = current_page ctx['article_count'] = count return TemplateResponse( request, System_Config.get_template_name('admin') + '/article_list.html', ctx) else: raise Http404
def file_list_show(request, item_type, item_id): ctx = {} ctx['action_url'] = '/admin/file-upload/' + item_type + '/' + item_id + "/" ctx['file_delete_url'] = '/file-delete/' + item_type ctx['host_item_id'] = item_id ctx['item_type'] = item_type if request.method == 'GET': if item_type == 'product' or item_type == 'product_album': try: item = Product.objects.get(id=item_id) ctx['item'] = item try: image_list = Product_Images.objects.filter( product=item).order_by('create_time').reverse() if item_type == 'product_album': image_list = Album.objects.filter( item_type=item_type, item_id=item.id).order_by('create_time').reverse() except: image_list = [] except: raise Http404 elif item_type == 'article': try: item = Article.objects.get(id=item_id) ctx['item'] = item try: image_list = Album.objects.filter( item_type=item_type, item_id=item.id).order_by('create_time').reverse() except: image_list = [] except: raise Http404 elif item_type == 'attribute': try: item = Attribute_Group.objects.get(id=item_id) ctx['item'] = item try: image_list = Album.objects.filter( item_type=item_type, item_id=item.id).order_by('create_time').reverse() except: image_list = [] except: raise Http404 elif item_type == 'slider': try: item = Slider.objects.get(id=item_id) ctx['item'] = item try: image_list = Album.objects.filter( item_type=item_type, item_id=item.id).order_by('create_time').reverse() except: image_list = [] except: raise Http404 elif item_type == 'attachment': try: item = Product.objects.get(id=item_id) ctx['item'] = item try: image_list = Album.objects.filter( item_type=item_type, item_id=item.id).order_by('create_time').reverse() logger.info(image_list) except: image_list = [] except: raise Http404 else: raise Http404 page_size = 12 count = image_list.count() image_list, page_range, current_page = my_pagination( request=request, queryset=image_list, display_amount=page_size) ctx['image_list'] = image_list ctx['page_range'] = page_range ctx['page_size'] = page_size ctx['current_page'] = current_page ctx['item_count'] = count return TemplateResponse( request, System_Config.get_template_name('admin') + '/picture_list.html', ctx) else: raise Http404
def ship_out(request): result_dict = {} if request.method == 'POST': #logger.debug('request.POST:%s' % request.POST) try: order_id = request.POST.get('order_id', '') order = Order.objects.get(id=order_id) except Exception as err: logger.error( 'Save shippment which id is [%s] faild. \n Error Message:%s' % (order_id, err)) result_dict['success'] = False result_dict['message'] = '订单号为%s的订单找不到!' % order_id return JsonResponse(result_dict) try: express_id = request.POST.get('express_id', '') express = Express.objects.get(id=express_id) except Exception as err: logger.error( 'Save shippment which id is [%s] faild. Because of the express which id is %s can not be found. \n Error Message:%s' % (order_id, express_id, err)) result_dict['success'] = False result_dict['message'] = 'ID号为%s的快递公司找不到!' % express_id return JsonResponse(result_dict) from shopcart.forms import order_shippment_form form = order_shippment_form(request.POST) if form.is_valid(): order_shippment = form.save() order_shippment.order = order order_shippment.shipper_name = express.name order_shippment.express = express order_shippment.save() #修改订单状态 is_all_shipped = request.POST.get('is_all_shipped', 'true') if is_all_shipped == 'false': order.status = Order.ORDER_STATUS_PART_SHIPPING else: order.status = Order.ORDER_STATUS_SHIPPING order.save() result_dict['success'] = True result_dict['message'] = '发货成功' return JsonResponse(result_dict) else: result_dict['success'] = False result_dict['message'] = '表单填写的内容不合法,请检查。' return JsonResponse(result_dict) else: ctx = {} ctx['system_para'] = get_system_parameters() ctx['page_name'] = '发货管理' order_id = request.GET.get('order_id', '') try: order = Order.objects.get(id=order_id) except Exception as err: logger.error('Can not find order [%s]. \n Error Message:%s' % (order_id, err)) raise Http404 #快递列表 express_list = Express.objects.filter(is_in_use=True).filter( is_delete=False) express_type_list = ExpressType.objects.filter(is_in_use=True).filter( is_delete=False) ctx['express_type_list'] = express_type_list express_list_result = express_list if order.express_type_id != 0: try: logger.debug("1.1") express_list_result = express_list.filter( express_type=order.express_type_id) logger.debug("1.2 : %s " % express_list_result) except Exception as err: logger.debug('1.3 : %s ' % err) ctx['express_list'] = express_list_result ctx['order'] = order return TemplateResponse( request, System_Config.get_template_name('admin') + '/order_shippment_detail.html', ctx)
def article_basic_edit(request): ctx = {} result = {} result['success'] = False result['message'] = '' result['data'] = {} # 加载自定义模板供选择 from .file import file_list template_list = file_list( System_Config.get_template_name('client') + '/custmize/', 'custmize_template_article') logger.debug('custome_templates: %s' % template_list) ctx['custmize_template'] = template_list if request.method == 'GET': id = request.GET.get('id', '') method = request.GET.get('method', 'blog') if id != '': try: article = Article.objects.get(id=id) ctx['article'] = article # 图片处理URL ctx['upload_url'] = '/admin/file-upload/article/%s/' % id logger.debug('upload_url:%s' % ctx['upload_url']) ctx['file_delete_url'] = '/file-delete/article' try: ctx['image_list'] = Album.objects.filter( item_type='article').filter( item_id=id).order_by('create_time').reverse() logger.debug("ctx['image_list']:%s" % ctx['image_list']) except Exception as err: logger.error("Error:%s" % err) ctx['image_list'] = [] logger.debug('article category:%s' % article.category) if article.category == Article.ARTICLE_CATEGORY_BLOG: ctx['is_blog'] = True else: ctx['is_blog'] = False except Exception as err: logger.error( 'Can not find article which id is %s. The error message is %s' % (id, err)) if method == 'blog': ctx['is_blog'] = True else: ctx['is_blog'] = False else: if method == 'blog': ctx['is_blog'] = True else: ctx['is_blog'] = False # 放入文章的业务分类 from .article_busi_category import get_all_category ctx['category_list'] = get_all_category() return TemplateResponse( request, System_Config.get_template_name('admin') + '/article_detail.html', ctx) elif request.method == 'POST': try: article = Article.objects.get(id=request.POST['id']) form = article_basic_info_form(request.POST, instance=article) except: article = None form = article_basic_info_form(request.POST) logger.info('New article to store.') if form.is_valid(): article = form.save() # # 只有属于博客类的文章才需要保存分类 # if article.category == Article.ARTICLE_CATEGORY_BLOG: # category_id = request.POST.get('busi_category', '') # if category_id: # try: # category = ArticleBusiCategory.objects.get(id=category_id) # except Exception as err: # logger.error('Can not find article_busi_category [%s].\nError Message:%s' % (category_id, err)) # result['success'] = False # result['message'] = '文章保存失败,请选择文章分类。' # result['data'] = {} # return JsonResponse(result) # article.busi_category = category # article.save() result['success'] = True result['message'] = '文章保存成功' data = {} data['article_id'] = article.id result['data'] = data else: result['success'] = False result['message'] = '文章保存失败' result['data'] = {} return JsonResponse(result) else: raise Http404