def user_login(request): [categories, suppliers, objectives, products_rec, offers] = list() if request.method == 'POST': form = LoginForm(request.POST) if form.is_valid(): cd = form.cleaned_data user = authenticate(request, username=cd['username'], password=cd['password']) if user: if user.is_active: login(request, user) return redirect('cart:cart_detail') else: messages.error(request, 'Аккаунт неактивен!') context = locals() template = 'account/login.html' return render(request, template, context) else: messages.error(request, 'Неверные логин или пароль') context = locals() template = 'account/login.html' return render(request, template, context) else: form = LoginForm() context = locals() template = 'account/login.html' return render(request, template, context)
def register(request): [categories, suppliers, objectives, products_rec, offers] = list() if request.method == 'POST': user_form = UserRegistrationForm(request.POST) profile_form = UserProfileForm(request.POST) if user_form.is_valid(): new_user = user_form.save(commit=False) new_user.set_password(user_form.cleaned_data['password']) email = user_form.cleaned_data["email"] # проверка на наличие email в базе. Уникальное значение в базе не удалось проставить if User.objects.filter(email=email).count() > 0 and email: messages.error(request, 'Пользовать с указанным email уже существует') context = locals() template = 'account/register.html' return render(request, template, context) else: new_user.save() login(request, new_user, backend='django.contrib.auth.backends.ModelBackend') messages.success(request, 'Спасибо за регистрацию на нашем сайте!') context = locals() return redirect('cart:cart_detail') else: user_form = UserRegistrationForm() context = locals() template = 'account/register.html' return render(request, template, context)
def deny(request, order_id): [categories, suppliers, objectives, products_rec, offers] = list() order = Order.published.get(id=order_id) username = request.user.username template = 'orders/order/deny.html' context = locals() return render(request, template, context)
def order_list(request, pk): [categories, suppliers, objectives, products_rec, offers] = list() order = Order.published.get(id=pk) items = order.items.all() template = 'orders/order/list.html' context = locals() return render(request, template, context)
def denied(request, order_id): [categories, suppliers, objectives, products_rec, offers] = list() order = Order.published.get(id=order_id) order.status = 'Отказ' order.save() subject = 'Отмена заказа' sender = '*****@*****.**' message = 'Отмена заказа!\n\n Номер заказа:{}\n Перейти в админку для просмотра заказа: {}' \ .format(order.id, 'https://mrpit.online/admin/orders/order') send_mail(subject, message, sender, ['*****@*****.**', '*****@*****.**']) template = 'orders/order/deny_submit.html' context = locals() return render(request, template, context)
def profile(request): [categories, suppliers, objectives, products_rec, offers] = list() orders = Order.published.filter(client=request.user) # Если юзер авторизован, то находим его профиль иначе редиректим на форму входа на сайт if request.user.is_authenticated: profile = Profile.published.get(user=request.user) else: return redirect('login') # блок для редактирования профиля if request.method == 'POST': user_form = UserProfileForm(request.POST, instance=profile) if user_form.is_valid(): user_form.save() messages.success(request, 'Профиль успешно изменён') else: user_form = UserProfileForm(instance=profile) context = locals() template = 'account/profile.html' return render(request, template, context)
def user_logout(request): [categories, suppliers, objectives, products_rec, offers] = list() logout(request) context = locals() template = 'account/logged_out.html' return render(request, template, context)
def order_create(request): [categories, suppliers, objectives, products_rec, offers] = list() cart = Cart(request) if not cart: messages.error(request, "Корзина пуста!") return redirect('cart:cart_detail') profile = Profile.published.get(user=request.user) data = { 'first_name': profile.first_name, 'last_name': profile.last_name, 'email': profile.email, 'address': profile.address, 'city': profile.city, 'postal_code': profile.postal_code, 'phone': profile.phone } postal_code = '' if request.method == 'POST': if 'form' in request.POST: form = OrderCreateForm(request.POST, initial=data) order = form.save(commit=False) else: perm_form = PermOrderCreateForm(request.POST, initial=data) order = perm_form.save(commit=False) if cart.coupon: order.coupon = cart.coupon order.discount = cart.coupon.discount order.client = request.user order.status = 'Новый' order.save() # Высчитываем массу и создаём объекты заказа в функции calc_order_total_mass order.total_mass = calc_order_total_mass(cart, order) cart.clear() # Пробуем получить стоимость доставки по API почты России. try: # если Пермь, то по дефолту будет стоить 200р. Если другой населенный пункт, # то пробуем рассчитать через API почты if order.city != 'Пермь': order.deliver_cost = russian_post_calc( postal_code=order.postal_code, mass=order.total_mass) except: try: # если пользователь ввёл неверный индекс, то пробуем посчитать доставку до белгорода order.deliver_cost = russian_post_calc(postal_code='308000', mass=order.total_mass) except: # если пользователь ввёл неверный индекс и API почты не работает, то ставим среднюю доставку 350 р order.deliver_cost = 350 order.save() messages.success(request, 'Заказ успешно создан.') messages.success(request, 'Оплатить заказ можно по форме ниже.') # Отправка письма администрации subject = 'Новый заказ' sender = '*****@*****.**' message = 'Новый заказ!<br> Номер заказа:{}<br> Город: {}<br>' \ 'Перейти в <a href="https://mrpit.online/admin/orders/order">Админку</a> для просмотра заказа. ' \ .format(order.id, order.city) mail_admin = EmailMessage(subject, message, sender, ['*****@*****.**', '*****@*****.**']) mail_admin.content_subtype = "html" mail_admin.send() # Отправка письма Клиенту client_subject = 'Заказ с сайта MrPit.Online' mail_from = '*****@*****.**' mail_to = [order.email] сlient_message = 'Спасибо за Ваш заказ!<br>Номер заказа:{}<br>' \ 'Стоимость заказа:{} р., Стоимость доставки:{} р.' \ 'Масса посылки с учетом упаковки:{} гр.<br>' \ 'Оплатить заказ Вы можете на сайте в ' \ '<a href="https://mrpit.online/account">Личном Кабинете</a><br>' \ 'После оплаты заказа мы начнём сборку. ' \ 'Статус заказа Вы можете отслеживать также в личном кабинете.<br><br>' \ 'Наши соцсети ждут именно Вас:<br>' \ '<a href="https://vk.com/mrpit.online">Вконтакте</a><br>' \ '<a href="https://instagram.com/mrpit.online">Instagram</a>' \ .format(order.id, order.get_total_cost(), order.deliver_cost, order.total_mass) mail = EmailMessage(client_subject, сlient_message, mail_from, mail_to) mail.content_subtype = "html" mail.send() username = request.user.username # перенаправляем пользователя в личный кабинет, где он сможет оплатить заказ return redirect('profile') else: form = OrderCreateForm(initial=data) perm_form = PermOrderCreateForm(initial=data) template = 'orders/order/create.html' context = locals() return render(request, template, context)