Архив рубрики: Python

Django. Настройка поддержки Django проектов в Pycharm Professional (часть 3)

Django (часть 1). Python, установка PIP и настройка Virtual Environment
Установка Django (часть 2), создание первого проекта

Pycharm Professional

Нажимаем create new project => выбираем Django => далее в Location выбираем папку с нашим проектом (sites -> dom_u_morja)

Нажимаем Create -> yes

Если в панели управления не горит зеленым запуск сервера, то идем в настройки.

File -> Settings -> Languages & Frameworks -> Django -> Enable Django Support

 

Пункт 3. Выбираем папку проекта

 

Пункт 4. Выбираем файл с настройками settings.py

 

Жмем OK -> OK

Панель запуска сервера стала активной. Нажимаем зеленый треугольник и Web сервер запустился

Нажимаем на ссылку в терминале, должен открыться браузер по этому же адресу

Автор: Vladimir Semenovich

Установка Django. Создание первого проекта (часть 2)

Официальный сайт
https://www.djangoproject.com/download/

Установка Django нужной нам версии. Если версия 1.9.5 вас не устраивает, то просто замените на ту, которая вам нужна.

$ pip install Django==1.9.5

Расшифровка (LTS) — long-term support releases

После того как мы активировали virtualenv, внутри его мы создаем наш проект, ссылка на первую статью: Django (часть 1). Python, установка PIP и настройка Virtual Environment

$ pip install django
или
$ easy_install django

В папке pyvenv/bin у нас появится файл django-admin.py, он позволяет как создавать так и управлять django-проектами.

$ python django-admin.py — команда для просмотра параметров, которые может выполнить этот скрипт.

Type 'django-admin.py help ' for help on a specific subcommand.

Available subcommands:

[django]
   check
   compilemessages
   createcachetable
   dbshell
   diffsettings
   dumpdata
   flush
   inspectdb
   loaddata
   makemessages
   makemigrations
   migrate
   runserver
   sendtestemail
   shell
   showmigrations
   sqlflush
   sqlmigrate
   sqlsequencereset
   squashmigrations
   startapp
   startproject
   test
   testserver
Note that only Django core commands are listed as settings are not properly configured (error: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.).

В настоящий момент нас интересует только параметр startproject

Создаем папку sites в каталоге pyvenv, тут будут храниться наши сайты.
$ mkdir sites
$ cd sites

Создаем наш первый проект на Django
$ python django-admin.py startproject dom_u_morja

Переходим в него
$ cd dom_u_morja

В этой папке находится очень интересный файл manage.py, он позволяет управлять уже созданным приложением.

$ python manage.py — команда для просмотра параметров, которые может выполнить этот скрипт

Type 'manage.py help ' for help on a specific subcommand.

Available subcommands:

[auth]
   changepassword
   createsuperuser

[django]
   check
   compilemessages
   createcachetable
   dbshell
   diffsettings
   dumpdata
   flush
   inspectdb
   loaddata
   makemessages
   makemigrations
   migrate
   sendtestemail
   shell
   showmigrations
   sqlflush
   sqlmigrate
   sqlsequencereset
   squashmigrations
   startapp
   startproject< /span>
   test
   testserver

[sessions]
   clearsessions

[staticfiles]
   collectstatic
   findstatic
   runserver

В настоящий момент нас интересует только параметр runserver

Этой командой мы запускаем встроенный в Django Web-сервер
$ python manage.py runserver

Выполнив эту команду мы получим информацию об используемой версии Django, текущую дату или информацию об ошибках, а также путь к нашему серверу 127.0.0.1:8000

April 15, 2016 — 19:17:14
Django version 1.9.5, using settings 'dom_u_morja.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Not Found: /
[15/Apr/2016 19:18:02] «GET / HTTP/1.1» 200 1767
Not Found: /favicon.ico
[15/Apr/2016 19:18:02] «GET /favicon.ico HTTP/1.1» 404 1941

Вернемся опять в командную строку и увидим сообщение о не примененных миграциях.
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
ctrl + c — чтобы остановить север.

Теперь введем.
$ python manage.py migrate

Сейчас в Django 1.9 используем migrate вместо syncdb.
Перед тем как делать syncdb, правильно запускать проверку:
python manage.py validate – проверяет на ошибки структуру ваших моделей,
validate — эта команда не работает в django 1.9 (нужно использовать check)

$ python manage.py check

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

Operations to perform:
Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
Rendering model states… DONE
Applying contenttypes.0001_initial… OK
Applying auth.0001_initial… OK
Applying admin.0001_initial… OK
Applying admin.0002_logentry_remove_auto_add… OK
Applying contenttypes.0002_remove_content_type_name… OK
Applying auth.0002_alter_permission_name_max_length… OK
Applying auth.0003_alter_user_email_max_length… OK
Applying auth.0004_alter_user_username_opts… OK
Applying auth.0005_alter_user_last_login_null… OK
Applying auth.0006_require_contenttypes_0002… OK
Applying auth.0007_alter_validators_add_error_messages… OK
Applying sessions.0001_initial… OK

Автор: Vladimir Semenovich

Несколько конфигов Sphinx

На компьютере разработчика может работать сразу несколько сайтов. Для разных сайтов могут быть заведены свои поисковые индексы Sphinx. Чтобы было удобно управлять разными конфигурациями, лучше завести отдельные конфигурационные файлы для каждого сайта, один общий конфиг и основной конфиг, который использует Sphinx. Вот как это сделать.
Начиная с версии Sphinx 0.9.8 (14 июля 2008 года) доступно задавать конфиг в виде скрипта. Сначала я попробовал сделать, как предложено в статье «Разделение конфигов Sphinx», но у меня не завелось. Возможно, из-за того, что я предпочитаю хранить конфиги в одном месте, а не в каталоге каждого сайта, как автор той статьи. Все мои конфиги Sphinx находятся к каталоге /etc/sphinx
Итого я имею:
1. список конфигов с именами «10-site1.part.conf«, «10-site2.part.conf«. Где число в начале — порядок для дальнейшей сборки в один файл (у меня все десятки). В конфигах обозначены настройки source и index
2. конфиг с общими настроками «90-common.part.conf«. Содержимое:

common
{
    lemmatizer_base     = /usr/local/share/sphinx/dicts
}

indexer
{
lemmatizer_cache    = 128M # from bitrix course
}

searchd
{
listen              = 127.0.0.1:9312
listen            = 9306:mysql41
log        = /usr/lib/tmpfiles.d/log/sphinx/searchd.log
query_log        = /usr/lib/tmpfiles.d/log/sphinx/query.log
read_timeout        = 5
max_children        = 30

pid_file        = /usr/lib/tmpfiles.d/run/sphinx/searchd.pid

seamless_rotate     = 1
preopen_indexes     = 1
unlink_old        = 1

binlog_path        = /usr/lib/tmpfiles.d/lib/sphinx
binlog_max_log_size = 16M
rt_flush_period     = 3600 # from bitrix course
}

3. основной конфиг, который запрашивает Sphinx — sphinx.conf. Этот конфиг собирает воедино все конфиги. Его содежимое:

#!/bin/bash

find /etc/sphinx -type f -name «*.part.conf» -print | xargs cat

Таким образом, если поиск на каком-то сайте мне не требуется, то нужно лишь переименовать файл его конфига (например «10-site1.bak.conf«). А если требуется добавить ещё один сайт, то стоит скопировать уже имеющийся конфиг и исправить его.
Эта схема разбиения конфигов Sphinx отлично работает с Sphinx 2.2.11 на Fedora 24

 

Автор: Олег Ехлаков

Как можно участвовать в ICFPC (2016)

«Рядом с этой сокровищницей мысли, — неторопливо думал Васисуалий, — делаешься чище, как-то духовно растешь»

В этом году мы с товарищами (ForNever, Minoru, Hagane, grouzen) опять взялись участвовать в ICFPC. Если кто не в курсе, что это такое — см мой предыдущий пост или серию постов товарища adept.
В этот раз для разнообразия мы не писали AI для игрушки. Организаторы были из Японии, и поэтому мы весь уик-енд… складывали оригами. Кто-то из кода, а кто-то нет.
Задача состояла в том, чтобы из квадратного «листа бумаги» складывать разные (плоские) фигуры. В качестве задачи даётся описание нужной фигуры, а решение — набор складок на квадрате и описание, какие вершины в какие переходят при складывании. Первая сотня фигур была предложена организаторами, а дальше задачи могли отправлять участники, и за отправку задач тоже давали очки.
При этом, на самом деле, это было «не настоящее оригами». Были допустимы решения, невозможные с бумагой — части листа могли проходить друг через друга при складывании. При отправке решений чужих задач можно было даже «рвать бумагу» (при отправке своих задач — нельзя). Момент про разрешено ли разрезание мы уточняли долго и сложно.
Контест в этот раз проходил с утра пятницы по вечер воскресенья в моём часовом поясе.

В пятницу

с утра я «по-быстрому» написал скачивалку задач с сервера и закачивалку решений (на python, просто потому что там было REST API, а у меня уже был опыт использования для этого питоньей библиотеки requests). Ещё я написал парсер предложенного формата задач и рендерилку, которая рисует фигуры из задач в виде svg (на Haskell). Сразу пригодился хаскельный модуль Data.Ratio. Дело в том, что в задачах использовались координаты в виде рациональных чисел, причём размеры числителя и знаменателя не были ограничены. Так что быстро образовалась строчка type Number = Ratio Integer.
Потом я посмотрел на результаты рендера и увидел, что первые семь задач тривиальные (там просто квадрат, сдвинутый или повёрнутый, но не сложенный), решения для них легко написать вручную. Решил и залил.
Потом мы начали думать над задачей (я уже писал, у меня всегда так — сначала код, потом думать).
Когда нет ограничения на разрезание бумаги, задача сводится к тому, чтобы разрезать квадрат на эн многоугольников и сложить из них нужную фигуру. Насколько я знаю, подобные темы широко и глубоко изучены, но я не знаком с конкретными работами и алгоритмами. (в университете был даже какой-то спецкурс по оригами, как разделу геометрии, но я на него не попал). Поэтому я долго и упорно думал в эту сторону, но ничего не придумал.
В чате довольно быстро образовалось несколько идей:

  • Разрезать требуемую фигуру на треугольники и попытаться из таких треугольников сложить квадрат.
  • Какой-нибудь вариант генетических алгоритмов: разрезаем квадрат как попало и складываем как попало, оцениваем скор в соответствии с правилами организаторов.
  • Быстро придумался простой алгоритм для складывания любого достаточно маленького выпуклого многоугольника: пройти по всем его рёбрам и сложить бумагу вдоль них. Если останутся торчащие «хвосты», то опять пройти по рёбрам и подвернуть вдоль них.
  • Кроме силуэта фигуры, в задачах приводился её «скелет» — набор всех рёбер в положении после складывания. При этом, правда, было указание, что это только подсказка, складывать в соответствии с этим скелетом не обязательно. Так вот, появилась идея брать этот скелет и пытаться разворачивать его до квадрата.

Товарищ grouzen произвёл обширные изыскания существующих научных работ на тему оригами и около, и обеспечил нас пейперами для чтения на всю неделю. К сожалению, применить их мы не смогли.
Потом начался как всегда разброд и шатание, каждый стал заниматься чем-то своим.
Я решил начать с написания какого-никакого «фреймворка» для дальнейшей работы — набора функций для разрезания многоугольников, объединения и т.п. Некоторые из геометрических алгоритмов тривиальны (отражение многоугольника относительно прямой), зато другие зубодробительны (объединение произвольных многоугольников). Для таких алгоритмов я стал гуглить существующие реализации, по возможности на Haskell (т.к. парсер задач уже был на Haskell). Нашёл только clipper. Это биндинги к одноимённой библиотеке на C++. Сразу обнаружилась особенность: Clipper работает с целочисленными координатами (видим

Python: настройка URL's в Django

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

1. Находим файл urls.py — у меня это путь D:djangoproblogblogblogurls.py
открываем и вставляем в массив(список) urlpatterns следующую строку 
url(r'', include('blg.urls')),
Напоминаю — blg — так мы назвали наше приложение директория которого будет иметь такое же название и будет находится в директории D:djangoproblogblog, это название еще встречается в файле settings.py(D:djangoproblogblogblog) в конце списка INSTALLED_APPS.
В результате должно быть такое содержимое urls.py:
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
    url(r'', include('blg.urls')),
    url(r'^admin/', admin.site.urls),
]
После проделанного Django будет перенаправлять все запросы 'http://127.0.0.1:8000/' к blg.urls и искать там дальнейшие указания.
!!!обязательным является импортирование модуля include

Далее в директории blg нужно создать файл urls.py cо следующим содержимым:

from django.conf.urls import url, include
from . import views
urlpatterns = [
    url(r'^$', views.post_list, name='post_list'),
]

Первая строка нам знакома, в ней мы импортируем модули  url и include(наличие которого обязательно), во второй импортируем все вьюхи(Views) приложения — которых пока нет. 
Теперь переходим на главную страницу нашего приложения и увидим ошибку окончание примерно которой следующее «….   'post_list' — no attribute 'post_list' «… как побороть ошибку и как сделать свою страницу на html я вам расскажу в следующем посте
Вопросы и обсуждения приветствуются.

Автор: Няшный Человек
Дата публикации: 2016-06-12T17:03:00.000+03:00

Python: Запуск Django проекта

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

Для того чтоб такое не повторялось, я создал данную заметку, которая и вам может понадобиться…

Шаг первый: Открываем калькулятор, закрываем!
Шаг номер два: Входим в виртуальное окружение Django

Шаг номер три: запускаем сервер
Для этого я должен попасть в папку в которой находится manage.py

Вот и все, сервер запущен, приложение — сайт работает!!!

Автор: Няшный Человек
Дата публикации: 2016-06-12T15:37:00.000+03:00