Интернет-магазин на фреймворке Django. Часть 5.

Регистрация и авторизация пользователей

Следующим делом, я приступил к созданию процесса регистрации и авторизации пользователей. Для этого, я создал файл registration.html, который отвечал у меня за саму регистрацию. Кроме этого, через терминал было установлено django-crispy-forms. Что это такое? Django-crispy-forms - это приложение, позволяющее работать с формами Django, а также отображать их без написания лишнего кода и с минимальными установками, что очень упрощает работу. После того, как данное приложение было установлено, его необходимо подключить к форме и в установленные приложения. Подключение к странице я реализовал с помощью команды {% load crispy_forms_tags %} в файле registration.html. Ну а далее, я создал саму форму с методом POST. Сам код представлен ниже.

registration.html

Далее, нам необходимо добавить метод views и urls ссылку на страницу. Как это делается я показывал в предыдущих частях. Единственным моментом является то, что вначале нам необходимо подключить определенные библиотеки в urls.py для взаимодействия с методами регистрации, которые уже встроены в Django:from web import views as userViews и from django.contrib.auth import views as authViews, после чего добавляем сам метод регистрации во views.py. Но вначале, нам также необходимо подключить определенные библиотеки: messages (для отправки сообщений, уведомлений) и login_required (позволяет проверять находится ли пользователь в профиле или нет, чтобы не предлагать регистрацию или вход).

views.py

from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .forms import UserOurRegistration

def register(request):
	if request.method == "POST":
		form = UserOurRegistration(request.POST);
		if form.is_valid():
			form.save()
			username = form.cleaned_data.get('username');
			return redirect('home')
	else:
		form = UserOurRegistration()
	return render(request, 'web/registration.html', {'form': form})

Помимо этого, в файле forms.py была написана сама форма регистрации и авторизации. Для этого мы импортируем библиотеку forms, таблицу зарегистрированных пользователей (User) и библиотеку для создания собственной формы UserCreationForm. После чего создаем форму.

forms.py

from django import forms
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm

class UserOurRegistration(UserCreationForm):
	email = forms.EmailField(required=True)

	class Meta:
		model = User
		fields = ['username','email', 'password1', 'password2']

Также была добавлена html страница и urls на страницу авторизации, если человек уже зарегистрирован, ну и кнопка выхода из профиля, которая перекидывала нас на начальную страницу.

urls.py

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from web import views as userViews
from django.contrib.auth import views as authViews
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('web.urls') ),
    path('registration/', userViews.register,name="reg"),
    path('login/', authViews.LoginView.as_view(template_name='web/login.html'), name="login"),
    path('exit/', authViews.LogoutView.as_view(template_name='web/index.html'), name="exit"),
]

if settings.DEBUG:
	urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

login.html


Реализация на сайте





Интернет-магазин на фреймворке Django. Часть 4.

Оформление заказа

После создания корзины, которая показывала, какие товары мы добавили, их цену и их количество, я приступил к реализации страницы оформления заказа, на которую мы уже переходили при нажатии на кнопку "Оформить заказ", расположенную в самой корзине. Как создавать страницу, я уже рассказывал в одной из предыдущих частей, на примере создания страницы товара и витрины. После того, как я создал страницу, там в ход пошла уже обычная верстка, а далее, я уже начал делать вывод товаров из корзины на нашу созданную страницу в виде таблицы. Для этого, в файле views.py я написал код, который у меня доставал все записи из модели "ProductInBasket", которая хранит все данные о товарах в корзине. Сама модель расположена в models.py. Также в файле checkout.html я сделал отрисовку полученных данных на самой странице. Но кроме вывода товаров из корзины, в данном файле была прописана также логика работы страницы, которая позволяла изменять количество товаров, считала стоимость по каждому товару и считала уже итоговую стоимость всего заказа в целом. Помимо этого, если у покупателя нету товаров в корзине, то при переходе на страницу, ему пишет "в корзине нет товаров".

Но это была проделана только половина работы. Основным этапом в данной части является написание back-end части, а именно, необходимо было, чтобы в Django-Admin Panel передавалась вся информация о заказчике, а также информация о самом заказе. И в ходе этой работы, была создана и мигрирована таблица в базу данных (как это делается я уже рассказывал в одной из части), куда, при нажатии на кнопку "Заказать", отправлялась вся информация о заказе и покупателе, а также дата его создания. Результат и сами коды, представлены ниже.

views.py

def checkout(request):
    session_key = request.session.session_key
    products_in_basket = ProductInBasket.objects.filter(session_key=session_key, is_active=True)
    print (products_in_basket)
    for item in products_in_basket:
        print(item)


    form = CheckoutContactForm(request.POST or None)
    if request.POST:
        print(request.POST)
        if form.is_valid():
            print("yes")
            data = request.POST
            name = data.get("name", "3423453")
            phone = data["phone"]
            address = data["address"]
            email = data["email"]
            user, created = User.objects.get_or_create(username=phone, defaults={"first_name": name})

            order = Order.objects.create(user=user, customer_name=name, customer_phone=phone,customer_address=address,customer_email=email)

            for name, value in data.items():
                if name.startswith("product_in_basket_"):
                    product_in_basket_id = name.split("product_in_basket_")[1]
                    product_in_basket = ProductInBasket.objects.get(id=product_in_basket_id)
                    print(type(value))

                    product_in_basket.nmb = value
                    product_in_basket.order = order
                    product_in_basket.save(force_update=True)

                    ProductInOrder.objects.create(product=product_in_basket.product, nmb = product_in_basket.nmb,
                                                  price_per_item=product_in_basket.price_per_item,
                                                  total_price = product_in_basket.total_price,
                                                  order=order)

            return HttpResponseRedirect(request.META['HTTP_REFERER'])
        else:
            print("no")
    return render(request, 'web/checkout.html', locals())

forms.py

class CheckoutContactForm(forms.Form):
    name = forms.CharField(required=True)
    phone = forms.CharField(required=True)
    address = forms.CharField(required=True)
    email = forms.CharField(required=True)

checkout.html



Результат по checkout.html

Результат в Django-Admin Panel


Конспект лекции "Изнанка e-commerce"

Тренд развития интернет торговли в России, да и в мире в целом очень огромный, особенно из-за пандемии. Онлайн интернет-магазинов растет с каждым днем все больше и больше, поэтому они должны следить за трендами, ведь если они отстали от тренда, то рем стремительно падают вниз. Если говорить исключительно о России, то она не сильно отстает от всего мира по трендам, потому что работа происходим в интернете и все, что появляется в западном интернете, в скором времени будет и у нас. Так как онлайн растет с каждым днем, то все больше и больше компаний переходят в интернет торговлю, из-за чего происходит оттягивание клиентов у конкурентов. Но сама по себе аудитория растет, и она выбирает уже выбирает определенный магазин или тренд, отталкиваясь от своего эмоциональнольного паттерна.

На данный момент один из самых важных трендов в e-commerce — сохранить переход в онлайн. Но данный тренд не эффективен, так как нету у клиентов нету возможности пощупать и примерить товар. Поэтому, наилучший тренд — это работа в офлайн и онлайне, то есть использовать два канала трафика. На первом канале, человек сможет не только купить товар, но и посмотреть его, пощупать и так далее. А если товара не окажется в наличии, то просто пойти и заказать его в онлайн режиме.

Если человек решил войти в e-commerce, то он обязан подумать, какой товар ему продавать, а именно: провести глубокий анализ рынка, изучить тренды, новости. Но данный метод имеет погрешность, потому что эти данные могут стать неактуальными. В этом и есть плюс интернет-магазинов: быстро среагировав на ситуацию на рынке, мы можем моментально заменить ассортимент товаров.

Нужен ли бренд? Бренд обязательно нужен и развиваем мы его за счет умения выбрать и продать товар. При этом, при смене ситуации на рынке не нужно кардинально менять свою нишу, нужно всегда оставаться в одной сфере. Если же вы продаете товар такой ниши, которую сложно продать онлайн в той или иной ситуации, например, пандемия, то нужно искать какие-нибудь методы продажи. Например, предложить клиентам выгодную акцию, оформить предзаказ из-за ограниченной поставки и так далее.

Сегодня, лучше идти со своим товаром, но если его нет, то можно скопировать у конкурентов и добавить свою ценность. А если самому создавать товар, то будет шанс 50 на 50 о востребованности товара.

Основными ошибками при создании интернет-магазина – незнание что продавать, то есть люди зачастую сначала создают магазин, а потому уже думают, что продавать. Чтобы этого избежать, необходимо выполнять анализ рынка, что популярно, а что нет. Вторая ошибка – люди не разбираются в сфере, то есть как продавать товар. Чтобы избежать этого, необходимо глубоко изучить тематику или нанять специалистов.

Если говорить о ценовой конкурентности, то это мировая ценность и чем она выше, тем лучше. То есть, можно поднять цену, но для этого вы должны что-то дать, например, увеличить гарантию или организовать бесплатный сервис.

При выборе ассортимента, необходимо найти золотую середину. Если же человек новичок, то лучше сделать конкретную специализацию. Ведь в этом и будет его особенность, он сможет найти свой процент людей, кому его товара будет нужен.

Маркетинговый бюджет при продвижении зависит от продаваемых товаров. Но среднем бюджет будет около 50-100 тыс.руб. Этих денег хватит для тестирования рекламы, нахождения первых клиентов и так далее. Также необходимо определиться, что делать своими руками, а что с помощью аутсорсинга. Например, какие товары продавать, создание описания к товару можно сделать самому, а запуск контекстной рекламы и рекламы в целом делать самостоятельно не стоит, потому что это очень долго и сложно.

При выборе подрядчика, необходимо смотреть три показателя, а именно: действительное подтверждение того, что он работает в этой нише, он может предоставить данные о тех, с кем работал и то, что его реклама работает до сих пор.

Также существуют определенные признаки того, что проект будет неуспешным. Достаточно задать один вопрос: Почему надо покупать товар именно у вас? Если ответить на этот вопрос затрудняются, то создавать интернет-магазин не стоит. То есть, необходимы какие-то уникальные преимущества. Также, маркерами, что что-то идет не так, являются не окупаемость рекламы и низкая частота покупки.

Если говорить о штате, то его сильно раздувать не стоит. В нем должно быть несколько сотрудников, например, руководитель по маркетингу, руководитель продаж, менеджер по продажам, логист, закупщик, сотрудник по оценке качества, человек управляющий контентом.

Конспект лекции "Разработка ТЗ на сайт компании"

Разработка абсолютно любого сайта должна начинаться с технического задания. Что такое ТЗ в целом? ТЗ – это документ, который должен описывать структуру сайта, для кого он предназначен и какой функционал должен на нем присутствовать. При этом, в ходе его написания обязательно должен учувствовать заказчик, потому что без его участия не получится сделать качественный продукт.

Но как мы можем разрабатывать ТЗ и описывать в нем функционал, когда порой не могут сформулировать целеполагание по сайту? В целом, это нормальная история, и в этом нет никаких проблем. Дело в том, что сайт – это такой продукт, к которому сами требования формируются по ходу его разработки. То есть, большинство заказчиков понимает, как должно быть, только когда уже видят готовый результат. Именно поэтому в техническое задание необходимо вынести только критические какие-то вещи, ради которых сайт создается, а все остальное можно либо отнести на доработке, либо в процессе разработки, когда заказчик принимает в этом непосредственное участие.

Если говорить об основных ошибках при написании ТЗ, то они в основном типовые. Самая распространенная – набор хотелок, то есть, когда клиент хочет сайт как у конкурентов, только с перламутровыми пуговицами, и разработчик должен самостоятельно себе в голову это уложить, откуда-то добыть информацию, и на выходе получить готовый продукт. Чтобы этого избежать, заказчик должен максимально подробно отрисовать свой сайт в виде схемы, прописать какой контент есть для каждого раздела, что в каждом разделе должно происходить, а уже потом идти к разработчику.

Исходя из этой ошибки, невольно задаёшься вопросом, а именно: есть ли вообще смысл копировать сайт конкурента? Тут все зависит от выбранной стратегии. Например, если сайт успешный, есть инсайдерская информация, что он хорошо продает, то это нормально, а если скопировать сайт в том числе и аналогичный по дизайну, то это не есть хорошо, потому что потребитель не сможет отличить один магазин от другого.

Также, можно использовать сайт под ключ, что будет вполне себе хороший способ сэкономить для тех, кто на старте, но нужно понимать, что все равно на выходе получится полуфабрикат. И дальше вот этот полуфабрикат, который мы имеем на руках, нужно будет пойти и готовить самостоятельно для того, чтобы он стал работающим инструментом. А если говорить о лендинге, то невозможно сказать, что это плохо, потому что лендинг является прекрасным вариантом для того, чтобы протестировать какую-то гипотезу. И если эта гипотеза работает, то уже можно создать полноценный сайт. Но если компания не хочет использовать полноценный сайт, то она должна понимать, что лендинг слабо продвигается по SEO запросам. Исключением является момент, когда компания находится на небольшом региональном рынке, в узкой тематике, тогда, возможно, будет продвижение.

При разработке сайта, лучше взять в штат прораба, который будет способен внятно перевести хотелки заказчика и его выявить потребности. При этом, сказав цену заказчику, он может торговаться, но это должно быть обоснованно. А при приеме работы, в первую очередь необходимо обращать внимание на соответствие с ТЗ. Также необходимо заключать договор в целях безопасности, чтобы заказчик на половине процесса не исчез.

Интернет-магазин на фреймворке Django. Часть 3.

Создание корзины

Я уже говорил во второй части, что на странице товаров я создал кнопку покупки и поле для добавления количество товаров, поэтому этот момент в этом разделе опускаем. Сама корзина реализована с помощью jQuery. Что такое вообще jQuery? jQuery — набор функций JavaScript, фокусирующийся на взаимодействии JavaScript и HTML. Первым делом, мы подключаем jQuery к нашему проекту путем написания команды в static (в моем случае это файл main.html, в который мы подключали все файлы в первой части, а именно: Js,css и так далее). После этого, в папке js мы создаем файл scripts.js. В данном файле был прописан код, который позволяет добавлять и удалять товар из корзины. Помимо этого, он еще позволял показывать сколько было взято товаров, его название, цену. А также в файле views.py тоже был написан код, который позволял сохранять данные на стороне сервера. Сами коды представлены ниже.

scripts.js

$(document).ready(function(){
    var form = $('#form_buying_product');
    console.log(form);

    function basketUpdating(product_id, nmb, is_delete){
        var data = {};
        data.product_id = product_id;
        data.nmb = nmb;
         var csrf_token = $('#form_buying_product [name="csrfmiddlewaretoken"]').val();
         data["csrfmiddlewaretoken"] = csrf_token;

        if (is_delete){
            data["is_delete"] = true;
        }

         var url = form.attr("action");

        console.log(data)
         $.ajax({
             url: url,
             type: 'POST',
             data: data,
             cache: true,
             success: function (data) {
                 console.log("OK");
                 console.log(data.products_total_nmb);
                 if (data.products_total_nmb || data.products_total_nmb == 0){
                    $('#basket_total_nmb').text("("+data.products_total_nmb+")");
                     console.log(data.products);
                     $('.basket-items ul').html("");
                     $.each(data.products, function(k, v){
                        $('.basket-items ul').append('
  • '+ v.name+', ' + v.nmb + 'шт. ' + 'по ' + v.price_per_item + 'руб ' + 'x'+ '
  • '); }); } }, error: function(){ console.log("error") } }) } form.on('submit', function(e){ e.preventDefault(); console.log('123'); var nmb = $('#number').val(); console.log(nmb); var submit_btn = $('#submit_btn'); var product_id = submit_btn.data("product_id"); var name = submit_btn.data("name"); var price = submit_btn.data("price"); console.log(product_id ); console.log(name); basketUpdating(product_id, nmb, is_delete=false) }); function showingBasket(){ $('.basket-items').toggleClass('hidden'); }; $('.basket-container').on('click, hover',function(e){ e.preventDefault(); showingBasket(); }); $('.basket-container').mouseover(function(){ showingBasket(); }); $('.basket-container').mouseout(function(){ showingBasket(); }); $(document).on('click', '.delete-item', function(e){ e.preventDefault(); product_id = $(this).data("product_id") nmb = 0; basketUpdating(product_id, nmb, is_delete=true) }) function calculatingBasketAmount(){ var total_order_amount = 0; $('.total-product-in-basket-amount').each(function() { total_order_amount = total_order_amount + parseFloat($(this).text()); }); console.log(total_order_amount); $('#total_order_amount').text(total_order_amount.toFixed(2)); }; $(document).on('change', ".product-in-basket-nmb", function(){ var current_nmb = $(this).val(); console.log(current_nmb); var current_tr = $(this).closest('tr'); var current_price = parseFloat(current_tr.find('.product-price').text()).toFixed(2); console.log(current_price); var total_amount = parseFloat(current_nmb*current_price).toFixed(2); console.log(total_amount); current_tr.find('.total-product-in-basket-amount').text(total_amount); calculatingBasketAmount(); }); calculatingBasketAmount(); });

    views.py

    def basket_adding(request):
    	return_dict = dict()
    	session_key = request.session.session_key
    	data = request.POST
    	product_id = data.get("product_id")
    	nmb = data.get("nmb")
    	is_delete = data.get("is_delete")
    
    	if is_delete == 'true':
    		ProductInBasket.objects.filter(id=product_id).update(is_active=False)
    		
    	else:
    
    
    		new_product, created = ProductInBasket.objects.get_or_create(session_key=session_key, product_id=product_id,
                                                                         is_active=True, defaults={"nmb": nmb})
    		if not created:
    			new_product.nmb+= int(nmb)
    		new_product.save(force_update=True)
    	
    
    	products_in_basket = ProductInBasket.objects.filter(session_key=session_key, is_active=True)
    	products_total_nmb = products_in_basket.count()
    	return_dict["products_total_nmb"] = products_total_nmb
        
       
    
    	return_dict["products"] = list()
    
    	for item in products_in_basket:
    		product_dict = dict()
    		product_dict["id"] = item.id
    		product_dict["name"] = item.product.name
    		product_dict["price_per_item"] = item.price_per_item
    		product_dict["nmb"] = item.nmb
    		return_dict["products"].append(product_dict)
    
    	return JsonResponse(return_dict)
    

    Помимо этого, была создана корзина в шапке сайта, при наведении на которую, она разворачивалась и там были показаны наши товары, а именно: название, цена за шт, количество, а также был крестик, позволяющий удалить товар из корзины. Также, я поработал с библиотекой Ajax. Ajax — подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером. То есть, я создал в Django-Admin Panel еще одну БД (как создавать БД я рассказывал ниже), в которой отображалась добавленные товары в корзине. И это как раз и было реализовано через Ajax. А для чего это нужно? Это нужно по большей части для анализа данных, какие товары добавляют больше всего, какие удаляют и тд. Итог выполнения представлен ниже.

    Как мы видим, в БД показывается ID товара, кол-во, цену за шт, итоговую цену, дату добавления и т.д. Помимо этого, мы видим, что в поле "Is active" стоит зеленая галочка. Это значит, что товар у человека до сих пор находится в корзине, а если товар удалить, то будет красный крестик. Но в ходе создания корзины, я столкнулся с очень серьезной проблемой, а именно: при обновлении страницы или переходе на другую товар пропадал из корзины. Эту проблему я решил с помощью context processors. context processors - это файл, который есть на всех страницах сайта. То есть, при перемещении по сайту, обновлении страницы, товары оставались в корзине и показывалось, сколько их там. Код контекстного процессора и результаты выполнения в целом представлены ниже.

    Код context processors

    from .models import ProductInBasket
    
    def getting_basket_info(request):
    
        session_key = request.session.session_key
        if not session_key:
            request.session["session_key"] = 123
            request.session.cycle_key()
    
        products_in_basket = ProductInBasket.objects.filter(session_key=session_key, is_active=True)
        products_total_nmb = products_in_basket.count()
    
        return locals()
    

    Итоговый результат реализации корзины

    Интернет-магазин на фреймворке Django. Часть 2.

    Сортировка товара

    Сделав витрину товаров на странице shop.html, которая открывалась сразу после нажатия на раздел магазин, я решил сделать сортировку всех этих товаров по категориям. Подключив скачанный шаблон, там были реализованы переключатели на странице, их я переименовал в нужные для меня названия: все товары, верхняя одежда, джинсы, обувь и очки. И саму сортировку я решил реализовать на этих переключателях, то есть при нажатии на верхнюю одежду у меня показывалась только верхняя одежда и так далее. Чтобы это реализовать, мы переходим в файл shop.html и прописываем метод {% for post in pr %} поверх всех наших категорий, который необходим для вывода всех вообще товаров. После этого, делаем сортировку по Availability с помощью команды {% if post.availability %}. Эта команда говорит нам о том, что если галочка стоит, то есть товар есть в наличии, то выводим этот товар, если нет, то нет. Далее, делаем проверку по указанной категории с помощью команды {% if post.group == "Outerwear" %}. Этот метод if говорит о том, что если товар соответствует категории верхней одежды, то он выводит этот товар. Но всего в работе у нас четыре категории товара, поэтому после блока верхней одежды у нас идет блок обуви. Чтобы была сортировка по обуви, перед блоком мы уже пишем команду {% elif post.group == "Shoes" %}. После обуви у нас идет джинсы, поэтому прописываем {% elif post.group == "Jeans" %} и самый последний блок - очки. Перед этим блоком мы просто указываем команду {% else %}, потому что он является последним. После чего мы прописываем команды: {% endif %} (завершает проверку по блоку), {% endif %} (завершает проверку по наличию товара) и {% endfor %} (завершает цикл for). В результате выполнения этих действий, мы получаем сортировку товара. Результат представлен внизу.

    Создание страницы товара

    Сделав вывод всех товаров на страницу, следующим этапом стало созданием страницы товаров, то есть, при нажатии на какой-нибудь товар, у нас открывается отдельная его страница, где будет его название, изображение, описание и цена. Для этого в файле urls.py я прописал следующую команду: path('shop/', views.product, name='product'). Она говорит о том, что ее название product и что она будет открывать товар со страницы shop в соответствии с его id. То есть, у меня в магазине у каждого товара есть номер и все информация будет выводиться в соответствии с этим номером. После этого, в файле views.py я прописал сам метод, который назывался product. Его код изображен внизу.

    def product (request, id):
    	product = Product.objects.get(pk=id)
    	context = {
    		'product': product
    	}
    
    	session_key = request.session.session_key
    	if not session_key:
    		request.session["session_key"]=123
    		request.session.cycle_key()
    		print(request.session.session_key)
    
    	return render (request,'web/product.html', context)
    

    Ну и последним этапом является создание самой html страницы (в моем случае - product.html). На этой странице сделана обычная верстка и вывод соответствующих полей из нашей БД. Кроме того, была создана кнопка "купить" и поле, для ввода количества товара, сколько мы хотим купить. Это пригодиться нам для реализации корзины и добавления товара в нее. Сам код и результат представлены внизу.

    Код product.html

    Результат

    Интернет-магазин на фреймворке Django. Часть 1.

    Первые шаги

    В ходе моего учебного процесса нам была поставлена задача о создании интернет-магазина на одном из двух фреймворков: Django или Flask. Поэтому, я решил, что попробую написать интернет-магазин мужской одежды на фреймворке Django.

    Конечно, первым делом мне необходимо установить Django, создать проект и все это дело настроить и подключить. Как это делается я уже рассказывал в предыдущей статье, поэтому я все сделал по аналогии, как и там. После того, как мой проект был готов к работе, я решил найти шаблон интернет-магазина и подключить его к своему проекту, потому что если его писать вручную, то это займет огромное количество времени. Найдя и скачав понравившийся мне шаблон, я скопировал из него все "css" файлы и вставил в свой проект, а именно: static/css. То же самое, я сделал и с js, contactform, fonts и img. Далее, я создал файл main.html, где подключил скопированные мною файлы с помощью команды {% load static %} в разделе "head". Я сделал это для того, чтобы все файлы, которые я подключил, были статичны на всех страницах, то есть будут фиксированными. А также была добавлена в этот файл шапка моего сайта, с нужными мне разделами, а именно: главная и магазин. Кроме этого, был создан файл index.html, в котором я с помощью команды {% extends 'web/main.html' %} взял уже подключенные мною настройки, то есть этот файл будет иметь те же настройки, что и main.html, а также будет статический зафиксирована шапка сайта, так как она тоже находится в этом файле. И это, в дальнейшем, я делал абсолютно с каждой страницей. Ну и также я скопировал из моего ранее скаченного шаблона весь тег body и вставил в этот файл. Далее, я просто занимался небольшой версткой и изменением информацией с картинками, подходящими для интернет-магазина. Единственный, но очень важный момент заключался в том, что у меня не работали кнопки в шапке, поэтому я создал ссылку на переход в нужные мне разделы, а именно в разделе urls.py прописал необходимые мне модули path с определенными названиями и создал сами методы в файле views.py с одноименными названиями. Например, я в urls.py создал path с названием "shop" и в файле views.py создал метод с названием "shop", который выполнял у меня открытие этой страницы (return render (request,'web/shop.html', context)) и уже в файле main.html я указал url ссылку на 'shop'. То есть, помимо этого, нам нужно еще создать html страницы, которые она будет открывать ( в моем случае, я создал shop.html на которой у меня будет отображаться весь товар) Благодаря этому, при нажатии на раздел магазин, у меня открывался сам магазин. С разделом "Главная" я сделал тоже самое, только при нажатии у меня открывался файл index.html (страница с основной информацией магазина). Получившиеся результаты представлены ниже.

    Создание супер пользователя для Django-Admin Panel и создание в ней первой БД

    Чтобы создать супер пользователя, то есть пользователя, который будет являться, так сказать "Администратором", и иметь свой логин и пароль в Django-Admin Panel и иметь доступ ко всем созданным БД в проекте и всем записям, которые находятся в этих БД, необходимо зайти в Windows PowerShell и прописать команды python manage.py migrate и python manage.py createsuperuser. После чего, появится форма для его создания, в которой мы вводим Username и Password, то есть логин и пароль. Причем огромным плюсом является то, что таких "Администраторов" может быть несколько, а не только один. Далее запускаем сервер и в командной строке пишем localhost:8000/admin/, где у нас появится наш Django-Admin Panel, в который мы вводим наши логины и пароли и входим. И в открывшемся окне, будут отображаться все наши дальнейшие созданные БД.

    Проделав эту манипуляцию, мы уже можем создавать наши БД. Что такое вообще БД? База данных — это организованная структура, предназначенная для хранения, изменения и обработки взаимосвязанной информации, преимущественно больших объемов. Для этого, мы переходим в файл model.py, где создаем модель, включающая в себя определенные поля и настройки для каждого поля. В моем случае, создается БД для добавления и удаления товара на сайте, поэтому я создал следующую модель.

    class Product(models.Model):
    	OUTERWEAR = 'Outerwear'
    	JEANS = 'Jeans'
    	SHOES = 'Shoes'
    	GLASSES = 'Glasses'
    
    	CHOISE_GROUP = {
    		(OUTERWEAR,'Outerwear'),
    		(JEANS,'Jeans'),
    		(SHOES,'Shoes'),
    		(GLASSES,'Glasses'),
    
    	}
    
    	name = models.CharField(max_length=100)
    	description = models.TextField()
    	price = models.IntegerField()
    	availability = models.BooleanField()
    	group = models.CharField(max_length=20,choices=CHOISE_GROUP,default=OUTERWEAR)
    	img = models.ImageField(default='no_image.jpg', upload_to='product_image')
    
    	def _str_(self):
    		return f'{self.name}'
    

    Далее, мы переходим в раздел admin.py и регистрируем созданную модель с помощью команды admin.site.register(Product), после чего делаем миграцию созданной таблицы. Для этого, заходим в Windows PowerShell и прописываем следующие команды: python manage.py makemigrations и python manage.py migrate. После чего, созданная мною модель товаров появится в Django-Admin Panel и я полноценно могу с ней работать, а именно: добавить товары на сайт. Результат представлен ниже.

    Но помимо того, чтобы добавить товар, необходимо еще его и вывести, чтобы он отображался не только в нашей БД, но и в самом магазине (в моем случае, я хочу, чтобы товары отображались в разделе "Магазин"). Для этого, переходим в файл views.py и прописываем следующую команду:"from web.models import Product", то есть мы импортируем нашу созданную таблицу Product из models.py. Далее, в созданном методе на открытие раздела магазин, пишем объект собирающий все строки нашей таблицы. Далее, создаем класс, в которую пишем название строки и присваиваем переменную product. После этого, в методе render, где указано название страницы, передаем сoзданный класс.

    def shop (request):
    	product = Product.objects.all()
    	context = {
    		'pr' : product
    	}
    	return render (request,'web/shop.html', context)
    

    После этого, настраиваем сам вывод, на странице shop.html. Например, в разделе "Верхняя одежда" и пишем:

    Тут мы делаем вывод изображения, названия товара и его цены. Итоговый результат показан внизу.

    Quick start фреймворка Django

    Как же создать проект на Django? В этой статье мы об этом и поговорим

    Для начала, необходимо установить сам фреймворк на свой компьютер. Для этого, мы переходим в командную строку и прописываем команду "pip install Django", после чего, у вас автоматический происходит установка.

    Далее, мы создаем папку в любом удобном для вас месте и под любым названием, в моем случае это рабочий стол и папка под названием "Site_Django". Далее мы кликаем на нашу папку один раз и после ее выделения зажимаем клавишу "Shift", нажимаем правой кнопкой мыши и выбираем пункт открыть окно PowerShell. После чего, у нас открывается окно, похожее на командную строку, где мы будем прописывать следующие команды, представленные ниже.

    В данном окне мы запустили наш проект под название "shop" и создали приложение "web". Это необходимо для нашей работы, при этом, название папок могут быть любыми. Далее, мы запускаем любой текстовые редактор, в моем случае это "Sublime Text 3" и переносим туда нашу созданную папку - "Site_Django". Далее мы подключаем наше приложение к основному проекту, для этого, мы переходим в папку "shop", файл "settings.py" и прописываем в "INSTALLED_APPS" наше приложение. Результат представлен ниже.

    Далее, после того, как мы подключили наше приложение к проекту, его можно запускать. Для этого переходим во все тот же PowerShell и прописываем команду "python manage.py runserver", которая отвечает за запуск нашего проекта. После чего, программа даст нам ссылку "http://127.0.0.1:8000/". Заходим в браузер и смотрим.

    Если вы получили то же, что и я, то тогда поздравляю, вы все сделали правильно и ваш проект готов к работе!

    Фреймворк Django

    В данной статье мне хотелось бы поговорить о таком достаточно популярном и распространенном фреймворке, как Django.

    Что такое Django?

    Django — это бесплатный и свободный фреймворк для веб-приложений, написанный на Python. Фреймворк — это набор компонентов, которые помогают разрабатывать веб-сайты быстро и просто.
    Каждый раз при разработке веб-сайтов требуются похожие компоненты: способ аутентифицировать пользователей, а именно: вход, выход, регистрация, панель управления сайтом, формы, инструменты для загрузки файлов и т. д.К счастью для нас, другие люди обратили внимание на возникновение однотипных проблем при веб-разработке, так что они объединились и создали фреймворки, такой как Django, которые предлагают нам готовые шаблоны для использования.То есть, Django - это фреймворк существующий, чтобы облегчить процесс разработки и позволить нам не изобретать колесо.

    Почему Django — отличный фреймворк для веб-разработки?

    Если вы спросите у нескольких разработчиков, почему они выбрали Django, ответы будут преимущественно одинаковыми. Ниже описаны основные преимущества фреймворка, благодаря которым он стал популярным.

    1) Развитая экосистема

    Опытные разработчики рекомендуют воспринимать Django как систему. Это значит, что фреймворк обычно используется с большим количеством сторонних приложений. Их можно выбирать в зависимости от потребностей конкретного проекта.Чтобы лучше понять этот принцип, представьте конструктор Lego. В нём есть много типовых блоков. В Django тоже есть типовые блоки. Например, блок авторизации или блок подписки на рассылку применяется практически в каждом проекте. Созданные с помощью фреймворка веб-приложения состоят из таких независимых блоков.

    2) Зрелость

    Django был представлен в 2005 году. За 14 лет существования он сильно изменился и усовершенствовался. В фреймворке постоянно появляются новые возможности, а старые совершенствуются.
    Важный момент: когда вы разбираетесь с Django и ищете ответ на конкретный вопрос, чаще всего это не вызывает затруднений. Тысячи специалистов уже решали такие же проблемы до вас и делились своим опытом в интернете. Так работает сообщество Django.

    3) Библиотеки

    В популярных языках программирования есть библиотеки, с помощью которых удобно решать специальные задачи. В библиотеках можно найти готовые решения: функции, классы, конфигурации и так далее. Благодаря таким решениям расширяются возможности языка, а также упрощается создание приложений.
    Django поддерживает использование библиотек при разработке веб-приложений. В число популярных библиотек входят:
    1) Django REST Framework, который упрощает работу с API.
    2) Django CMS — удобный инструмент для управления контентом.
    3) Django-allauth — с его помощью реализуются функции регистрации, авторизации, управления учётными записями.

    Недостатки Django

    Как и у любого инструмента, у Django есть некоторые недостатки, которые представлены ниже.

    1) Нет поддержки WebSocket по умолчанию

    Протокол WebSocket обеспечивает обмен данными между сервером и браузером в режиме реального времени. Django не поддерживает эту функциональность из коробки. Но проблему можно решить с помощью других инструментов, например, aiohttp.

    2) Непредсказуемость поведения некоторых компонентов

    Поведением некоторых компонентов Django не всегда просто управлять. Например, к таким компонентам относится административная консоль. Если вы захотите добавить что-то, что не входит в экосистему Django, это может потребовать серьёзных усилий и много времени.В целом преимущества Django с запасом перекрывают недостатки этого фреймворка. Но всегда полезно знать об альтернативах, о которых пойдёт речь дальше.

    Какие программы были написаны на Django?

    На данном фреймворке было написано достаточно много популярных приложения. Честно говоря, когда я узнал я был в достаточно сильном удивлении. Сами программы: YouTube,Instagram,Reddit,Google Search,Pinterest и так далее.

    Сравнение Django с другими фреймворками

    Для того, чтобы сделать выводы о популярности этого фреймворка, было принято решение создать сравнительную таблицу, расположенную ниже. Django был сравнен с такими фреймворками как – Tornado и CherryPy по следующим критериям:
    • Группа фреймворков: Full stack или Micro-framework.
    • Звёзды Github: общее количество звезд проекта, выставленных пользователям.
    • Релизы Github: количество релизов каждого проекта, что отражает активность работы над проектом и его зрелость.
    • Fork-и Github: количество, сделанных копий каждого проекта, что показывает популярность использования проекта в собственных работах.
    • Вопросы Stack-overflow: количество вопросов, заданных по определенной теме.
    • Вакансии: количество вакансий, связанных с технологиями или ИТ компетенциями.
    Сама сравнительная таблица:

    Название фреймворка Группа фреймворка Звёзды на Github Релизы на Github Fork-и на Github Вопросы Stack-overflow Вакансии
    Tornado Micro 18 900 1311 5 100 9 1
    Django Full 46 528 275 20 400 217 030 42
    CherryPy Micro 1 130 127 279 1 300 0

    Вывод

    Исходя их этой статьи, можно смело сделать вывод о том, что Django очень популярный фреймворк, который востребован на рынке и на котором можно создавать интересные и актуальные Web-приложения.

    Фреймворк Zope

    Данная статья посвящена такому фреймворку, как Zope. Zope – достаточно популярный Web-фреймворк, который написан на языке программирования Python, при этом, в основном он применяется в качестве системы управления содержимым сайта, то есть - контентом.

    Краткая история о том, как зарождался Zope

    В 1998 году сотруднику компании Digital Creations - Джиму Фултону было предложено прочитать лекцию о стандартных интерфейсах, которые используются для связи внешней программы с веб-сервером (CGI). Согласно легенде, он ничего об этом не знал, и его начальнику, пока они летели в самолете, пришлось рассказать ему основы CGI. С этой лекцией, Джим выступил на конференции. Говорят, что протокол ужаснул его своей чрезмерной простотой, и на основе этого, Фултон решил создать что-нибудь объектно-ориентированное. Было создано три открытых Python пакета: Bobo, Document Template, и Bobopos. Эти пакеты — веб публикатор, движок шаблонов, и объектная база данных стали ядром Principia, то есть коммерческого сервера приложений. А в ноябре 1998 года, инвестор Хадар Педхазур убедил Digital Creations сделать Principia открытым, после чего, эти пакеты развились в компоненты ядра фреймворка Zope 2, а компания получила новое имя — Zope Corporation и начала выпускать свой продукт под собственной Open Source лицензией ZPL. Так началась история Zope.

    Почему стоит выбрать этот фреймворк?

    Основной особенностью Zope является его объектно-ориентированность:
    • Он представляет собой коллекцию компонентов - объектов, с четко заданной функциональностью, которая описывается с помощью интерфейсов;
    • Каждый компонент можно заменить на любой другой с таким же интерфейсом (можно провести аналогию с моделью провайдеров в ASP.NET). Таким образом, компоненты выполняют один и тот же функционал, но разными способами. А программист выбирает из них наиболее подходящий;
    • Имеет объектную базу данных ZODB, предназначенную для естественного хранения объектов;
    • Строгие стандарты для разработки, выпуска и обслуживания программного обеспечения;
    • Мощный механизм HTML/XML-шаблонов и широкие возможности для тестирования.

    Сравнение Zope с другими фреймворками

    Для того, чтобы сделать выводы о популярности этого фреймворка, было принято решение создать сравнительную таблицу, расположенную ниже. Zope был сравнен с такими фреймворками как – Jango и CherryPy по следующим критериям:
    • Группа фреймворков: Full stack или Micro-framework.
    • Звёзды Github: общее количество звезд проекта, выставленных пользователям.
    • Релизы Github: количество релизов каждого проекта, что отражает активность работы над проектом и его зрелость.
    • Fork-и Github: количество, сделанных копий каждого проекта, что показывает популярность использования проекта в собственных работах.
    • Вопросы Stack-overflow: количество вопросов, заданных по определенной теме.
    • Вакансии: количество вакансий, связанных с технологиями или ИТ компетенциями.
    Сама сравнительная таблица:

    Название фреймворка Группа фреймворка Звёзды на Github Релизы на Github Fork-и на Github Вопросы Stack-overflow Вакансии
    Zope Full 196 229 81 3 0
    Django Full 46 528 275 20 400 217 030 42
    CherryPy Micro 1 130 127 279 1 300 0

    Вывод

    Исходя из проделанной работы можно сделать вывод о том, что данный фреймворк имеет достаточное небольшое сообщество и многие разработчики, работающие на Python, даже не слышали о нем, поэтому в случае чего, вам будет трудно найти человека, к которому можно будет обратиться за советом. Помимо этого, будет достаточно трудно найти обширную документацию и учебники по Zope, поэтому придется много копаться. Но все же, если вам нужна обширная высоко структурированная среда для создания больших приложений, то фреймворк Zope вам более чем подходит.