def create_order_page(request, id): if len(Product.objects.filter(id=id)) == 0: return redirect('404') context = get_base_context(request, "Оформление заказа") user_info = get_user_info(request, user=request.user) product = Product.objects.get(id=id) if request.method == "POST": count = int(request.POST.get('count')) size = request.POST.get('size') phone = request.POST.get('phone_number') price = count * product.price wishes = request.POST.get('wishes') new_order = Orders(customer=user_info, product=product, count=count, size=size, phone=phone, time=datetime.datetime.now(), price=price, customer_status="n", customer_wishes=wishes) new_order.save() return redirect('show_order', id=new_order.id) else: context['order_number'] = len(Orders.objects.all()) + 1 context['product'] = product context['user_info'] = user_info context['photo'] = product.photo.split(sep=',')[0] return render(request, 'create_order.html', context=context)
def account_settings_page(request): context = get_base_context(request, "Настройки") context['user_info'] = get_user_info(request, user=request.user) if request.method == 'POST': user = User.objects.get(username=request.user) user_info = get_user_info(request, user=user.username) passwd_is_changed = False phone_is_changed = False fname = request.POST.get('first_name') lname = request.POST.get('last_name') d_of_b = request.POST.get('date_of_birth') email = request.POST.get('email') phone = request.POST.get('phone') old_pass = request.POST.get('old_passwd') new_pass = request.POST.get('new_passwd') user.first_name = fname user.last_name = lname user.email = email if user_info.phone_number != phone: user_info.phone_number = phone phone_is_changed = True if d_of_b != "": user_info.date_of_birth = d_of_b if user.check_password(old_pass): user.set_password(new_pass) passwd_is_changed = True else: if old_pass != "": context['errors'].append("Старый пароль неверный") user.save() user_info.save() if passwd_is_changed or phone_is_changed: return redirect('login') if passwd_is_changed else redirect('settings') return render(request, 'settings.html', context=context)
def upload_file(request): context = get_base_context(request, "Загрузка фотографии") if request.method == 'POST': user_profile = get_user_info(request, user=request.user) uploaded_photo = request.FILES['document'] url = upload_photo(uploaded_photo, uploaded_photo.name, user_profile.photo) user_profile.photo = url user_profile.save() return redirect('settings') return render(request, 'upload.html', context=context)
def create_comment_page(request, info): c_type, item_id = map(int, info.split(sep=",")) if request.method == "POST": comment_text = request.POST.get('comment_text', '') if c_type == 0: if len(Product.objects.filter(id=item_id)) > 0: product = Product.objects.get(id=item_id) Comment(author=get_user_info(request, request.user), product=product, text=comment_text, time=datetime.datetime.now( tz=pytz.timezone('Europe/Moscow'))).save() return redirect('product', id=item_id) elif c_type == 1: if len(Orders.objects.filter(id=item_id)) > 0: order = Orders.objects.get(id=item_id) if order.customer_id == get_user_info(request, request.user).id: if order.status == "d": Comment1(author=get_user_info(request, request.user), product=order.product, text=comment_text, time=datetime.datetime.now( tz=pytz.timezone('Europe/Moscow')), order=order).save() order.customer_status = "dc" if order.customer_status == "d" else "ndc" order.save() return redirect('my_orders', 1) return redirect('permission_error') return redirect('404')
def delete_comment_page(request, comment): comment_type, comment_id = map(int, comment.split(sep=",")) user_info = get_user_info(request, request.user) if comment_type: if Comment1.objects.filter(id=comment_id): comment = Comment1.objects.get(id=comment_id) else: if Comment.objects.filter(id=comment_id): comment = Comment.objects.get(id=comment_id) if comment.author.id == user_info.id: comment.delete() return HttpResponseRedirect( request.GET.get('next', '/profile/' + str(user_info.id))) return redirect('permission_error')
def show_order_page(request, id): if len(Orders.objects.filter(id=id)) > 0: order = Orders.objects.get(id=id) else: return redirect('404') if not have_access(request, "orders:check") and order.customer.id != get_user_info( request, request.user).id: return redirect('permission_error') context = get_base_context(request, "Заказ №" + str(order.id)) context['order'] = order if order.product != None: context['photo'] = order.product.photo.split(sep=',')[0] return render(request, 'show_order.html', context=context)
def account_banned_page(request, username=""): user = User.objects.get(username=username) context = get_base_context(request, "Ваш аккаунт заблокирован!") user_info = get_user_info(request, user) context['reason'] = user_info.ban_reason context['user'] = user context[ 'report_status'] = "not reported" if user_info.is_reported == 0 else "report cancelled" if user_info.is_reported == -1 else "reported" context['user_profile'] = user_info if user_info.is_reported == 0: if request.method == "POST": report_text = request.POST.get('report_text', '') user_info.is_reported = 1 user_info.report_text = report_text user_info.save() return redirect('account_banned', username=username) return render(request, "registration/account_banned.html", context=context)
def orders_list_page(request, id): if len(User.objects.filter(id=id)) == 0: return redirect('404') user = User.objects.get(id=id) user_info = get_user_info(request, user=user.username) context = get_base_context(request, "Все заказы") context['user_info'] = user_info context['orders'] = [{ 'order': order, 'comment': Comment1.objects.get( product=order.product, author=user_info, order=order) if len( Comment1.objects.filter(product=order.product, author=user_info, order=order)) else None } for order in Orders.objects.filter(customer=user_info)] context['orders_count'] = len(context['orders']) return render(request, 'orders_list.html', context=context)
def user_login(request, action=""): context = get_base_context(request, "Авторизация") context['next'] = request.GET.get('next', '/') if request.POST: username = request.POST.get('username', "") password = request.POST.get('password', "") user = authenticate(username=username, password=password) if user is not None: if user.is_active: user_profile = get_user_info(request, user) if user_profile.is_banned: return redirect("account_banned", username=user.username) else: login(request, user) if user.is_superuser: return redirect('admin_panel') return HttpResponseRedirect(request.POST['next']) return render(request, 'registration/login.html', context=context)
def my_orders_page(request, page): context = get_base_context(request, "Мои заказы") user = request.user user_info = get_user_info(request, user) orders_on_page = 25 orders = [] orders_dbase = [{'order': order, 'product_photo': order.product.photo.split(sep=",")[0] if order.product else "" } for order in Orders.objects.filter(customer_id=user_info.id)] if len(request.GET) > 0: status_filter = request.GET.get('filter', '') search = request.GET.get('search', "") confirmation = request.GET.get('confirmation', '-1') if confirmation != "-1": order_id, val = map(int, confirmation.split(sep=",")) if len(Orders.objects.filter(id=order_id)) > 0: order = Orders.objects.get(id=order_id) if not val: order.customer_status = "c" order.status = "c" order.cancel_reason = "отменено покупателем" else: order.customer_status = "d" if order.customer_status != "ndc" else "dc" order.save() return redirect('my_orders', page=page) if search != "": words = search.split() new_orders = [] for order in orders_dbase: if order['order'].product == None: continue score = 0 for word in words: if order['order'].product.name.lower().find(word.lower()) != -1: score += 1 if score > 0: new_orders.append({'order': order, 'score': score}) new_orders = sorted(new_orders, key=lambda x: x['score']) orders_dbase = [order['order'] for order in new_orders] if status_filter != "": orders_dbase = [{'order': order, 'product_photo': order.product.photo.split(sep=",")[0] if order.product else "" } for order in Orders.objects.filter(customer_id=user_info.id, status=status_filter)] if len(orders_dbase) != 0: if len(orders_dbase) <= orders_on_page * (int(page) - 1): return redirect('404') range_from = orders_on_page * (int(page) - 1) range_to = range_from + orders_on_page if range_from + orders_on_page < len(orders_dbase) else range_from + (len(orders_dbase) - range_from) for i in range(range_from, range_to): orders.append(orders_dbase[i]) context['orders'] = reversed(orders) context['pages'] = { 'max': len(orders_dbase) // orders_on_page if (len(orders_dbase) / orders_on_page) % 1 == 0 else len(orders_dbase) // orders_on_page + 1, 'current': int(page) } return render(request, "my_orders.html", context=context)
def admin_admins_panel_page(request, page): context = get_base_context(request, "Панель управления пользователями") if not have_access(request, "admins:see"): return redirect('permission_error') users_on_page = 25 users = [] users_dbase = UserProfile.objects.all() if len(request.GET) > 0: search = request.GET.get('search', "") ban = request.GET.get('ban', "-1") ban_report = request.GET.get('ban_report', "-1") status_filter = request.GET.get('filter', '') if search != "": words = search.split() new_users = [] for user in users_dbase: score = 0 for word in words: if user.user.first_name.lower().find(word.lower()) != -1: score += 1 if user.user.last_name.lower().find(word.lower()) != -1: score += 1 if score > 0: new_users.append({'user': user, 'score': score}) new_users = sorted(new_users, key=lambda x: x['score'], reverse=True) users_dbase = [user['user'] for user in new_users] elif status_filter != "": if status_filter == "banned": users_dbase = UserProfile.objects.filter(is_banned=True) elif status_filter == "admins": users_dbase = [item for item in users_dbase if item.user.is_superuser] elif ban != "-1": if have_access(request, "admins:ban"): val, user_id, reason = ban.split(sep=",") val = int(val) user_id = int(user_id) if len(User.objects.filter(id=user_id)) > 0: user = User.objects.get(id=user_id) user_profile = get_user_info(request, user) user_profile.is_banned = val user_profile.is_reported = 0 user_profile.report_text = "" user_profile.ban_reason = reason user.save() user_profile.save() return redirect('admins_panel', page=page) return redirect('permission_error') if ban_report != "-1": if have_access(request, "admins:ban"): val, user_id = map(int, ban_report.split(sep=",")) if len(User.objects.filter(id=user_id)) > 0: user = User.objects.get(id=user_id) user_profile = get_user_info(request, user) if val: user_profile.is_banned = 0 user_profile.is_reported = 0 user_profile.ban_reason = "" user_profile.report_text = "" else: user_profile.is_reported = -1 user_profile.save() return redirect('admins_panel', page=page) return redirect("permission_error") if len(users_dbase) != 0: if len(users_dbase) <= users_on_page * (int(page) - 1): return redirect('404') range_from = users_on_page * (int(page) - 1) range_to = range_from + users_on_page if range_from + users_on_page < len(users_dbase) else range_from + (len(users_dbase) - range_from) for i in range(range_from, range_to): users.append(users_dbase[i]) context['users'] = users context['pages'] = { 'max': len(users_dbase) // users_on_page if (len(users_dbase) / users_on_page) % 1 == 0 else len(users_dbase) // users_on_page + 1, 'current': int(page) } return render(request, 'admin/admins_panel.html', context=context)