[Обновляется]
Заметки по настройке и работе с фреймворком Django 1.11 и Python 3.52.
Простые примеры по работе с Python3.
https://youtu.be/UjMOev2NTg4?list=PL6Fp8QPl6sOi0FXf1XNjt4bNDBJ0wGdGF
Краткое описание видеоурока
Конструктор класса __init__ и его применение.
class Man:
def __init__(self):
self.__a= None
self.__b=None
def set_b(self,b):
self.__b=b
def set_a(self,a):
self.__a=a
def __str__(self):
return str(self.__a)
m=Man()
m.set_a(25)
print(m)
наследование классов и переопределение функций с помощью super():
class Woman(Man):
def __init__(self):
super()
self.__lang=None
def set_lang(self, l):
self.__lang=l
def __str__(self):
return super().__str__()+' '+self.__lang
w=Woman()
w.set_a(33)
w.set_b(55)
w.set_lang('Python')
print(w)
Настройка и работа с базами данных.
https://youtu.be/-D6hVchRamk?list=PL6Fp8QPl6sOi0FXf1XNjt4bNDBJ0wGdGF
Краткое описание видеоурока.
Создание базы данных в файле models.py.
Работа с базой данных из командной строки.
from blog.models import Post - из файла моделей импортируем наш класс с постами
posts=Post.objects.all() - в переменную posts заносим все посты из базы данных при помощи метода objects.all()
С помощью цикла можем отобразить все нужные поля элементов. Например поле ID всех элементов:
for post in posts:
print(post.id)
posts=Post.objects.get(id=1) - в методе objects.all() можем применять аргумент id=1, тогда в переменной posts окажется только пост с id 1. Аналогично работает метод filter.
posts=Post.objects.filter(id="2")
Можем вывести посты из нашей переменной posts командой print (posts)
Можем создать пост через конструктор класса Django:
newpost=Post(title="Post number n", text="Text post number n"), а затем сохранить его с помощью метода save():
newpost.save()
Создание новых постов. Просмотр постов через команду из командной строки. Удаление постов через командную строку.
Представление постов через шаблонизатор Djinja посредством переменных на странице html. Настройка urls.py для отображения имеющихся в базе данных постов с параметром запроса в адресной строке браузера.
Генератор постов (данных из модели Django) в виде списка.
Пример: [post.title for post in Post.objects.all()]
Реверсирование постов (самый новый пост сверху). Иконки для сайтов с популярного ресурса fontawesome.io/icons/.
Использование bootstrap3 в Django
http://django-bootstrap3.readthedocs.io/en/latest/quickstart.html
Установить bootstrap3 командой
pip django-bootstrap3
В файле представлений views.py импортируем установленный пакет bootstrap3 записью:
import bootstrap3
В настройках проекта в файле settings.py добавляем запись в поле INSTALLED_APPS=[
'bootstrap3',
]
В html файле, в который рендерится представление, должна быть запись типа такого:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% load bootstrap3 %} #Грузим библиотеку bootstrap3
{% bootstrap_messages %} #Отображаем возможные ошибки bootstrap3 в среде разработки
{% bootstrap_css %} #Грузим библиотеку css
{% bootstrap_javascript %} #Грузим библиотеку javascript
</head>
<body>
<button type="submit" class="btn btn-primary"> #Наша кнопка отображаемая в стиле btn btn-primary bootstrap3
{% bootstrap_icon "star" %} Submit
</button>
</body>
</html>
второй вариант с двумя кнопками и без комментариев для ctrl-c, ctrl-v
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% load bootstrap3 %}
{% bootstrap_css %}
{% bootstrap_javascript %}
{% bootstrap_messages %}
</head>
<body>
{% buttons %}
<button type="submit" class="btn btn-primary">
{% bootstrap_icon "star" %} Submit
</button>
<button type="button" class="btn btn-outline-secondary">Secondary</button>
{% endbuttons %}
</body>
</html>
В данном случае отображается кнопка, в стиле bootstrap (голубая с закругленными краями)
Сброс забытого пароля админа Django
Восстановление забытого пароля Django. В шелле (python manage.py shell) выполняем следующие команды:
from django.contrib.auth.models import User
user = User.objects.get(username='admin')
user.set_password('mynewpassword')
user.save()
Перенос базы данных в проекте
Если необходимо перенести БД со старой на новую, к примеру с SqlLite на MySQL, это можно сделать с помощью следующих команд через файл JSON:
1. Выполняется со старыми настройками DATABASES в settings.py
python manage.py dumpdata > datadump.json
2. Выполняется с новыми настройками DATABASES в settings.py
python manage.py loaddata datadump.json
Доступ к проекту Django по сети
По умолчанию проект Django запускается командой
python manage.py runserver
и виден с локального хоста на порту 8000, то есть видимость по умолчанию Django предлагает по адресу 127.0.0.1:8000
Для вывода проект в продакшн (деплоить проект), нужно установить сервер wsgi.
Вместе с тем есть возможность увидеть проект по сети с помощью сервера Django для разработки без установки wsgi или других веб серверов (не рекомендуется для продакшена).
Для этого правим файл settings.py проекта и добавляем запись:
ALLOWED_HOSTS = [
'10.10.12.1'
]
10.10.12.1 - адрес хоста с проектом Django
Затем запускаем команду
python manage.py runserver 0.0.0.0:8000 или
python manage.py runserver 0.0.0.0:80 (номер порта не важен)
можно просто
python manage.py runserver 0:80
Далее наш сервер Django будет доступен из любого хоста в видимой сети по адресу
http://10.10.12.1:8000
Хранение шаблонов в другой папке. В файле settings.py изменяем настройки TEMPLATES а именно параметр DIRS. По умолчанию он
'DIRS': [],
пустой. Добавляем
'DIRS': [os.path.join(BASE_DIR, 'templates')],
теперь наши шаблоны хранятся в корневой папке проекта в папке templates.
Поле с возможностью выбора в админке
from django.db import models
CHOISES = (
(u'Копирайтинг', 'Копирайтинг'),
(u'Рерайтинг', 'Рерайтинг'),
(u'SEO-копирайтинг', 'SEO-копирайтинг'),
(u'SEO-рерайтинг','SEO-рерайтинг'),
)
class Works(models.Model):
...
choises = models.CharField("Выбор", max_length=16,
choices=CHOISES, default="Копирайтинг")
Не подхватывается изображение в Django (загруженное при помощи поля ImageFileld в модели проекта)
runserver по дефолту раздает static, но не раздает media.
Можно в urls.py добавить следующий код:
from settings import DEBUG, MEDIA_URL, MEDIA_ROOT
if DEBUG:
urlpatterns += static(MEDIA_URL, document_root=MEDIA_ROOT)
urlpatterns += staticfiles_urlpatterns()
Еще один вариант решения это установить wsgi-middleware dj-static через менеджер пакетов pip:
pip install dj-static
Чтобы подключить статику, нужно дописать в wsgi.py проекта
from django.core.wsgi import get_wsgi_application
from dj_static import Cling, MediaCling
application = Cling(MediaCling(get_wsgi_application()))
Деплой сайта Django в продакшн (web server Nginx).
Если не отображаются стили в django admin в админке Django (1.11)
Для начала нужно выполнить команду
python manage.py collectstatic
В настройках nginx (/etc/nginx/sites-available/default) изменить строки:
location /static/ {
root /home/user/myprojectenv/myproject/static;
expires 30d;
}
/home/user/myprojectenv/myproject/static - путь который выдает при команде
python manage.py collectstatic
|