Часть 1: Введение и настройка проекта
Сумка для продуктов — это способ хранения продуктов для продажи. Он будет содержать домашнюю страницу, на которой будет показан весь список товаров для покупки и уже купленных. Пользователи смогут добавлять элементы, обновлять элементы и даже удалять их.
- Пользователи могут зарегистрироваться и будут иметь систему входа/выхода.
- Пользователи могут создать список продуктов для покупки.
- Создать флаг типа — купил, ушел и не доступен
- Создайте панель для отображения сохраненных списков, а на главной странице будут отображаться все списки по дате.
Скриншоты
Ниже приведены несколько скриншотов, которые дадут вам представление о том, что мы строим.
Прежде чем приступить к настройке проекта, убедитесь, что в вашей системе установлен Python. Вы можете проверить это с помощью следующей команды:
$ python
Python 3.9.7 (tags/v3.9.7:1016ef3, Aug 30 2021, 20:19:38) [MSC v.1929 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information.
>>>
Если вы получите приведенный выше вывод, у вас установлен Python. Если нет, то вы можете скачать его с этой страницы.
Мы будем использовать виртуальную среду env
для нашего проекта. Создадим среду:
$ python -m venv env
Примечание. Вы можете использовать python3
вместо python
в соответствии с вашими требованиями.
Для активации среды используйте команду:
Теперь, когда у нас активирована виртуальная среда, мы можем установить необходимые библиотеки, используя команду ниже:
$ pip install Django
Приведенная выше команда установит Django в нашу виртуальную среду. Теперь мы готовы создать наш проект Django под названием GroceryBag
. Выполните следующую команду, чтобы создать проект в текущем каталоге:
$ django-admin startproject GroceryBag .
Теперь, согласно требованиям, нам нужны два приложения — bag
для обработки CRUD-операций с пакетом для продуктов и accounts
для обработки аутентификации. Давайте создадим эти приложения одно за другим.
$ python manage.py startapp bag
$ python manage.py startapp accounts
После создания двух приложений создайте отдельные файлы urls.py
в обоих каталогах приложений и добавьте в оба файла следующее содержимое.
from django.urls import path
urlpatterns = [
]
Затем нам нужно зарегистрировать эти два приложения в нашем проекте. Итак, откройте settings.py
в каталоге GroceryBag и добавьте два приложения в список INSTALLED_APPS
.
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # Your apps below 'accounts', 'bag', ]
На более позднем этапе проекта мы развернем его на бесплатной облачной платформе. Итак, нам нужно настроить переменные среды. Давайте установим python-decouple, чтобы помочь нам с ними:
$ pip install python-decouple
После установки создайте файл .env
в текущем каталоге и добавьте в него следующее содержимое.
SECRET_KEY=django-insecure-6wx#%@2ift=4@1(*eiw5n&rh!5t!bytp6=#8viz^$ola#p5nsm DEBUG=True
Теперь нам нужно внести несколько изменений в файл settings.py
. Сделаем их:
""" Django settings for GroceryBag project. Generated by 'django-admin startproject' using Django 3.2.9. For more information on this file, see https://docs.djangoproject.com/en/3.2/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/3.2/ref/settings/ """ from pathlib import Path from decouple import config # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = config('SECRET_KEY') # Get value from environment variables # SECURITY WARNING: don't run with debug turned on in production! DEBUG = config('DEBUG') # Get value from environment variables ALLOWED_HOSTS = ['127.0.0.1', 'localhost'] # Add these two for now # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # Your apps below 'accounts', 'bag', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'GroceryBag.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'], # Add the templates directory 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'GroceryBag.wsgi.application' # Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } # Password validation # https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Internationalization # https://docs.djangoproject.com/en/3.2/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/3.2/howto/static-files/ STATIC_URL = '/static/' STATIC_ROOT = BASE_DIR / 'staticfiles' STATICFILES_DIRS = [ BASE_DIR / "static", ] # Default primary key field type # https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
В приведенном выше файле мы внесли важные изменения, связанные с шаблонами и статическими каталогами.
После этого создайте каталог templates
и каталог static
в текущем каталоге для файлов HTML и статических файлов (CSS, JavaScript, изображения) соответственно. Внутри статической папки создайте еще одну папку с именем css
, где будут храниться все файлы CSS.
Загрузите шаблоны HTML и файлы CSS здесь и добавьте их в соответствующие каталоги.
Теперь откройте файл GroceryBag/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 urlpatterns = [ path('admin/', admin.site.urls), path('', include('bag.urls')), path('accounts/', include('accounts.urls')), ] if settings.DEBUG: urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
В приведенном выше сценарии мы включили URL-адреса из приложений bag
и accounts
. Кроме того, мы создали шаблон URL для статических файлов, которые будем обслуживать.
Следующее, что нам нужно сделать, это перенести базу данных с помощью следующей команды:
$ python manage.py migrate
Когда вы запустите команду, вы увидите некоторый вывод. После завершения вы увидите файл db.sqlite3
в текущем каталоге. Это показывает, что наша база данных была успешно перенесена.
Теперь мы можем запустить сервер как:
$ python manage.py runserver
Когда вы запустите сервер, вы получите URL-адрес в консоли. Откройте его в своем любимом браузере, и вы увидите аналогичный вывод.
Пока не беспокойтесь об этой ошибке. Он просто говорит нам, что не может найти маршрут /
. Мы решим это в следующем блоге. На этом мы завершили настройку проекта. Вы можете сопоставить структуру каталогов до сих пор:
. ├── GroceryBag │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── accounts │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── bag │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── db.sqlite3 ├── manage.py ├── static │ └── css │ └── style.css └── templates ├── add.html ├── index.html └── update.html
Заключение
В этом блоге мы поняли, что мы собираемся построить в этом проекте. Мы также создали наш проект. В следующем блоге мы начнем работу над проектом. Следите за обновлениями!
Код до сих пор: https://github.com/ashutoshkrris/Grocery-Bag/tree/blog1
Первоначально опубликовано на https://iread.ga.
Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку здесь.