Skip to content

Instantly share code, notes, and snippets.

@wpupru
Last active December 13, 2018 03:55
Show Gist options
  • Select an option

  • Save wpupru/b484c97f1e970fb83255ea9d991dc925 to your computer and use it in GitHub Desktop.

Select an option

Save wpupru/b484c97f1e970fb83255ea9d991dc925 to your computer and use it in GitHub Desktop.
Работа_с_Django
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