Last active
December 13, 2018 03:55
-
-
Save wpupru/b484c97f1e970fb83255ea9d991dc925 to your computer and use it in GitHub Desktop.
Работа_с_Django
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 1.Узнаем версию pip и обновляем | |
| python -m pip install --upgrade pip | |
| 2.Подключаем postgresql | |
| ************************************************* | |
| DATABASES = { | |
| 'default': { | |
| 'ENGINE': 'django.db.backends.postgresql_psycopg2', | |
| 'NAME': 'firstproject', | |
| 'USER': 'salan2000', | |
| 'PASSWORD': 'Mara12Fet', | |
| 'HOST': 'localhost', | |
| 'PORT': '5432', | |
| } | |
| } | |
| ************************************************* | |
| 3.Устанавливаем нужный модуль psycopg2 | |
| pip install psycopg2 | |
| 4.Реализуем миграции | |
| python manage.py migrate | |
| 5.Работаем с зависимостями | |
| a)Создаем список зависимостей | |
| pip freeze -> req.txt | |
| b)Обновляемся по полученному списку: | |
| pip install -r req.txt | |
| c)Снова выполняем список зависимостей: | |
| pip freeze -> req.txt | |
| *************************************************************************************************** | |
| 6.Можно изменить язык и временные настройки: | |
| LANGUAGE_CODE = 'en-us' // если изменить на ru-ru, сайт будет на русском, или на es-es для испанского | |
| TIME_ZONE = 'UTC' | |
| 7.Создаем суперпользователя | |
| python manage.py createsuperuser | |
| *************************************************************************************************** | |
| 8.Создаем новое приложение: | |
| python manage.py startapp firstapp | |
| 7.Добавляем его в settings.py | |
| INSTALLED_APPS = [ | |
| ............., | |
| ............., | |
| 'firstapp', | |
| ] | |
| 10.Создаем в новом приложении в models.py новый класс PizzaShop | |
| class PizzaShop(models.Model): | |
| name = models.CharField(max_length=30, verbose_name='Пиццерия') | |
| description = models.TextField(verbose_name='Описание') | |
| rating = models.FloatField(default=0, verbose_name='Рейтинг') | |
| url = models.URLField(verbose_name='Интернет-адрес пиццерии') | |
| 11.В базе данных создаем таблицу для этой модели: | |
| python manage.py makemigrations | |
| python manage.py migrate | |
| 12.Для вывода в админке приложения переходим в admin.py и регистрируем наше приложение: | |
| a)импортируем модуль | |
| from firstapp.models import PizzaShop | |
| b)регистрируем модель: | |
| admin.site.register(PizzaShop) | |
| 13.Добавляем в админке одну пиццерию, но чтобы отображались названия по полям, необходимо | |
| в модель добавить строку: | |
| def __str__(self): | |
| return self.name // отображение по полю name | |
| 14.Добавление связей | |
| a)Добавляем новый класс Pizza | |
| class Pizza(models.Model): | |
| #добавляем переменную для связи с моделью PizzaShop | |
| #(on_delete= — обязательные парамент для ForeignKey) | |
| #связь Один ко многим | |
| pizzashop_id = models.ForeignKey(PizzaShop, verbose_name='Пиццерии', on_delete=models.CASCADE) | |
| name = models.CharField(max_length=30, verbose_name='Название пиццы') | |
| short_description = models.CharField(max_length=100, verbose_name='Краткое описание') | |
| price = models.IntegerField(default=0, verbose_name='Цена') | |
| b)Также добавляем метод вывода по имени: | |
| def __str__(self): | |
| return self.name | |
| c)Регистрируем новую модель в admin.py | |
| from firstapp.models import PizzaShop, Pizza | |
| admin.site.register(Pizza) | |
| d)Создаем миграцию и добавляем в базу: | |
| python manage.py makemigrations | |
| python manage.py migrate | |
| 15.Добавляем в модели метаданные для сортировки и назначения имен отображения, | |
| вставляется внутри класса: | |
| class Meta: | |
| verbose_name = 'Пиццерия' | |
| verbose_name_plural = 'Пиццерии' | |
| 16.После каждого изменения модели, необходимо повторить миграции | |
| python manage.py makemigrations | |
| python manage.py migrate | |
| 17.Сортировка — для сортировки добавляем в класс Meta метод ordering: | |
| ordering = ['name'] или по цене ['price'] | |
| 18. Также можно изменить на другой язык название приложения: | |
| a)В файле apps.py добавим в класс FirstappConfig | |
| verbose_name = 'Первое приложение' | |
| b)В __init__.py добавляем: | |
| default_app_config = 'firstapp.apps.FirstappConfig' | |
| 19.Работа в консоле Python | |
| python manage.py shell | |
| >> from firstapp.models import Pizza | |
| >>pizza = Pizza.objects.all() | |
| >>print(pizza) //выведет все имеющиеся | |
| >>p1 = pizza[0] | |
| >>print(p1) | |
| >>price = p1.price | |
| >>print(price) | |
| >>id = p1.id | |
| >>print(id) | |
| Использование метода Filter | |
| >>pizza_filter = Pizza.objects.filter(name_startswith='Ко') | |
| >>print(pizza_filter) | |
| Выведет все начинающиеся на Ко | |
| >>pizza_price = Pizza.objects.filter(price__lte=290) //поиск по цене | |
| >>print(pizza_price) //выведет все где цена 290 | |
| Метод сортировки order_by (по умолчанию сортируются по возростанию, для сорт. по убыванию, необходимо | |
| поставить в аргументе знак минус '-price') | |
| >>pizza_sort = Pizza.objects.order_by('price') | |
| >>print(pizza_sort) | |
| Также можно добавить несколько параметров для сортировки: | |
| >>pizza_sort = Pizza.objects.order_by('price', 'name') | |
| >>print(pizza_sort) | |
| Также можно создавать цепочки объекта QuerySet | |
| >>pizza_link = Pizza.objects.filter(price__lte=310).order_by('-price') | |
| >>print(pizza_link) | |
| ***************************************************************************** | |
| 20.Методы агрегации(различных вычислений — aggregate) | |
| методы: | |
| models.Avg - средняя величина | |
| models.Min - минимальная величина | |
| сначала необходимо импортировать модуль для работы с методом aggregate: | |
| >>from django.db import models | |
| >>ad = Pizza.objects.aggregate(models.Avg('price'), models.Min('price')) | |
| >>print(ad) | |
| >>avd_price = ad['price__avg'] | |
| >>min_price = ad['price__min'] | |
| >>print(avd_price) | |
| >>print(min_price) | |
| 21.Метод Get | |
| >>p4 = Pizza.objects.get(name='Грибная') | |
| >>print(p4) | |
| >>p5 = Pizza.objects.get(id=5) | |
| >>print(p5) | |
| Для выхода из оболочки shell необходимо набрать quit() | |
| *********************************************************************************** | |
| 22.Привязка интернет адресов | |
| path имеет два обязательных параметра 'вид представления' и метод который будет его обрабатывать(можно не указывать явным образом метод-обработчик, а вместо этого метода можно передавать другой файл urls.py который будет проводить более детальную маршрутизацию. | |
| Для этого необходимо импортировать функцию include | |
| from django.urls import include | |
| и затем вместо метода hello указываем в include тот файл, который будет обрабатывать метод request маршрутизации. | |
| include('testurlapp.urls') | |
| Теперь создаем в testurlapp файл urls.py и продублируем туда содержание основного urls.py | |
| Из импорта оставляем только | |
| from django.urls import path | |
| И создаем собственную переменную urlpatterns с своим списком маршрутов: | |
| urlpatterns = [ | |
| path('', метод-обработчик-запроса(назовем его url_app) ) | |
| ] | |
| Добавим импорт этого метода из .views этого приложения: | |
| from .views import url_app (лучше импортировать всё с помощью *) | |
| И в views создадим метод-обработчик с таким же названием с рендингом нужной страницы | |
| def url_app(request): | |
| return render(request, 'home.html') | |
| ), а также имя для этого паттерна и дополнительные параметры которые можно будет передать в функцию. | |
| urlpatterns = [ | |
| path('путь' метод-обработчик, 'имя_этого_паттерна', 'параметры_для_передачи_в_функцию') | |
| ] | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment