def login(request): """Авторизация пользователя""" context = {} q_string = {} containers = {} result = login_from_site(request) if isinstance(result, list): context['errors'] = result else: save_user_to_request(request, result) context['shopper'] = result.to_dict() context['redirect'] = reverse('%s:%s' % (CUR_APP, 'show_profile')) if request.is_ajax(): return JsonResponse(context, safe=False) template = 'web/login/registration.html' page = SearchLink(q_string, request, containers) if not page: page = Blocks(name=reg_vars['singular_obj']) context['breadcrumbs'] = [{ 'name': 'Регистрация', 'link': reverse('%s:%s' % (CUR_APP, 'registration')), }] context['page'] = page context['containers'] = containers context['vk_link'] = VK().get_auth_user_link() context['yandex_link'] = Yandex().get_auth_user_link() return render(request, template, context)
def confirm_phone(request): """Запрос на подтверждение телефона, проверка кода подтверждения телефона """ result = {} shopper = get_shopper(request) if not shopper: # Упрощенная регистрация по телефону if request.GET.get('digits'): if request.session.get('confirm_phone') and request.GET[ 'digits'] == request.session['confirm_phone']: new_user = Shopper.objects.create( phone=request.session['phone'], name='Гость', ) save_user_to_request(request, new_user) if phone_confirmed(request): # Тел подтвержден result['success'] = 1 fs_shopper(request) return JsonResponse(result, safe=False) result = prepare_session(request, request.GET.get('phone')) return JsonResponse(result, safe=False) if request.GET.get('digits'): if request.session.get('confirm_phone') and request.GET[ 'digits'] == request.session['confirm_phone']: if phone_confirmed(request): # Тел подтвержден result['success'] = 1 fs_shopper(request) return JsonResponse(result, safe=False) result = prepare_session(request) return JsonResponse(result, safe=False)
def registration(request): """Страничка для регистрации""" mh_vars = reg_vars.copy() context = {} q_string = {} containers = {} shopper = get_shopper(request) if shopper: return redirect(reverse('%s:%s' % (CUR_APP, 'show_profile'))) # ----------- # регистрация # ----------- if request.method == 'POST': result = register_from_site(request) if isinstance(result, list): context['errors'] = result else: save_user_to_request(request, result) context['shopper'] = result.to_dict() context['redirect'] = reverse('%s:%s' % (CUR_APP, 'show_profile')) if request.is_ajax(): return JsonResponse(context, safe=False) template = 'web/login/registration.html' page = SearchLink(q_string, request, containers) if not page: page = Blocks(name=reg_vars['singular_obj']) context['breadcrumbs'] = [{ 'name': mh_vars['singular_obj'], 'link': reverse('%s:%s' % (CUR_APP, 'registration')), }] context['page'] = page context['containers'] = containers context['vk_link'] = VK().get_auth_user_link() context['yandex_link'] = Yandex().get_auth_user_link() return render(request, template, context)
def show_profile(request): """Личный кабинет пользователя""" mh_vars = profile_vars.copy() context = { 'fs_server': settings.FREESWITCH_DOMAIN, 'tab': request.GET.get('tab'), } q_string = {} containers = {} shopper = get_shopper(request) if not shopper: return redirect(reverse('%s:%s' % (CUR_APP, 'login'))) if request.method == 'POST': result = update_profile_from_site(request) if isinstance(result, list): context['errors'] = result else: save_user_to_request(request, result) context['shopper'] = result.to_dict() context['redirect'] = reverse('%s:%s' % (CUR_APP, 'show_profile')) if request.is_ajax(): return JsonResponse(context, safe=False) template = 'web/login/profile.html' page = SearchLink(q_string, request, containers) if not page: page = Blocks(name=mh_vars['singular_obj']) context['breadcrumbs'] = [{ 'name': 'Ваш аккаунт', 'link': reverse('%s:%s' % (CUR_APP, 'show_profile')), }] context['page'] = page context['containers'] = containers context['shopper'] = shopper #context['orders'] = Orders.objects.filter(shopper=shopper).order_by('-created')[:50] return render(request, template, context)
def create_new_order(request, shopper, cart, comments: str = None): """Оформление заказа пользователем, нажатие кнопки на сайте Оформить заказ :param request: HttpRequest :param shopper: покупатель :param cart: корзинка пользователя :param comments: комментарий к заказу (доп инфа) """ if not shopper or not cart or not shopper.id: return {} fields = ( 'name', 'first_name', 'last_name', 'middle_name', 'email', 'phone', 'address', ) if not request.method == 'POST': return { 'shopper_data': { field: getattr(shopper, field) for field in fields if getattr(shopper, field) } } new_order = None errors = [] # Подтверждение заказа shopper_data = {} for field in fields: value = request.POST.get(field) shopper_value = getattr(shopper, field) if not value and shopper_value: value = shopper_value elif value and not shopper_value: Shopper.objects.filter(pk=shopper.id).update(**{field: value}) setattr(shopper, field, value) shopper_data[field] = value save_user_to_request(request, shopper) email = check_email(shopper_data['email']) if not email: errors.append('Неправильно указан email') phone = check_phone(shopper_data['phone']) if not phone: errors.append('Неправильно указан телефон') if not shopper_data['name']: errors.append('Укажите как к вам обращаться') if not errors: # Оформление заказа promocode = None if cart.get('promocode'): promocode_id = request.session.get('promocode') promocode = PromoCodes.objects.filter(pk=promocode_id).first() new_order = Orders.objects.create( total=cart['total_with_discount'], discount=cart['discount'], promocode=promocode, shopper=shopper, shopper_ip=get_request_ip(request), shopper_name=shopper_data['name'], shopper_email=shopper_data['email'], shopper_phone=shopper_data['phone'], shopper_address=shopper_data['address'], state=2, comments=comments, ) purchases = cart.get('purchases') for purchase in purchases: Purchases.objects.filter(pk=purchase.id).update(order=new_order, cost=purchase.cost) if 'promocode' in request.session: del request.session['promocode'] scheme = 'https://' if request.is_secure() else 'http://' domain = '%s%s' % (scheme, request.META['HTTP_HOST']) notify_about_order(new_order, purchases, domain=domain) return { 'order': new_order, 'errors': errors, 'shopper_data': shopper_data, }