Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

установка DjangoBB

#python #django


Подскажите пожалуйста, как правильно установить DjangoBB?

Все делаю по мануалу https://bitbucket.org/slav0nic/djangobb/wiki/QuickInstall

И когда выполняю команду

./manage.py syncdb --all


Вылетает сообщение об ошибке:

/usr/local/lib/python2.7/dist-packages
    /django_haystack-2.3.1-py2.7.egg/haystack/utils/__init__.py:12: RemovedInDjango19Warning:
django.utils.importlib will be removed in Django 1.9.
  from django.utils import importlib

Traceback (most recent call last):
  File "./manage.py", line 10, in 
    execute_from_command_line(sys.argv)

  File "/usr/local/lib/python2.7/dist-packages
    /Django-1.8.4-py2.7.egg/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()

  File "/usr/local/lib/python2.7/dist-packages
    /Django-1.8.4-py2.7.egg/django/core/management/__init__.py", line 312, in execute
    django.setup()

  File "/usr/local/lib/python2.7/dist-packages
    /Django-1.8.4-py2.7.egg/django/__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)

  File "/usr/local/lib/python2.7/dist-packages
    /Django-1.8.4-py2.7.egg/django/apps/registry.py", line 108, in populate
    app_config.import_models(all_models)

  File "/usr/local/lib/python2.7/dist-packages
    /Django-1.8.4-py2.7.egg/django/apps/config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)

  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)

  File "/usr/local/lib/python2.7/dist-packages
    /djangobb_forum-0.0.1a0-py2.7.egg/djangobb_forum/models.py", line 48, in 
    path = os.path.join(settings.STATIC_ROOT, 'djangobb_forum', 'themes')

  File "/usr/lib/python2.7/posixpath.py", line 73, in join
    path += '/' + b

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 10: ordinal
not in range(128)


settings.py

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
os.path.join(PROJECT_ROOT,'project_static'),
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

    


Ответы

Ответ 1



Изначально данное руководство было написано в средине августа 2015 и опубликовано на Stack Overflow на английском. На данный момент DjangoBB состоит из двух Git частей: 3 ветки для самого приложения (stable, default и bootstrap3) и 2 ветки для проектра (default и dimka665/*********) 1) stable/default/botstrap3 — означает DjangoBB_Forum как приложение (App). Stable ветка имеет последнюю версию кода, по этому будем использовать именно ее. Source (Исходники) Zip archive (тоже самое, но в архиве) 2) default — Скелет\Структура Django проекта со всеми настройками (urls.py, settings.py, templates, и тд.), которые требуются для запуска приложения 'DjangoBB_Forum'. Это ТОЛЬКО скелет\структура проекта (подобно тому, что делает Django команда ./manage.py startproject) и НЕ включает в себя DjangoBB_Forum. Source (Исходники) Zip archive (тоже самое, но в архиве) Скачиваем оба архива, распаковываем их и для удобства переименовываем 2 папки, которые мы получили (обе папки имеют изначальное имя 'slav0nic-djangobb-****') в DjangoBB_App для 'stable' ветки приложения и в DjangoBB_Project для 'default' ветки проекта. (Мы собираемся объединить файлы обоих архивов) Инсталяция. На сегодняшний день (19.09.2015) последняя версия Django - 1.8.4. Этот мануал также 100% подходит для 1.8.2 и 1.8.3. Я не тестил более ранние версии Django. На данный момент требования у DjangoBB_Forum следующие: Django>=1.6,<1.9 (последняя актуальная стабильная версия 1.8.4) django-haystack>=2.1.0,<2.4 (актуальная версия на время написания руководства - 2.4) Pillow>=2.1.0 (актуальная версия 2.9.0) postmarkup (актуальная версия 1.2.2) pygments (актуальная версия 2.0.2) pytz>=2015.4 (эта версия является актуальной) django-pagination-py3==1.1.1 (эта версия является актуальной) django-allauth (актуальная версия 0.23.0) django-messages (актуальная версия 0.5.1) django-nocaptcha-recaptcha (актуальная версия 0.0.18) whoosh (актуальная версия 2.7.0) Самая большая проблема с интегрированием DjangoBB_Forum в существующий проект являются настройки, потому как они различаются от пользователя к пользователю. На примере свой структуры проекта я продемонстрирую настройки urls.py и settings.py, что поможет вам интегрировать настройки в свой проект благодаря всем необходимым объяснениями. Перед тем, как использовать настройки файла settings.py указанные ниже, вы должны изменить свои настройки Базы Данных (в секции DATABASES) на свои собственные настройки БД. Также, намного ниже вы увидите 2ой скриншот с заметками для файлов\папок, которые объясняют, что вам нужно поменять в settings.py, потому как наверняка имеете другие абсолютные пути и наверное, относительные пути тоже. Так же хочу отметить, что на скришнотах вместо файла 'settings/settings.py', вы увидите 3 других файла (default_settings.py, development.py, production.py). По этому в руководстве, когда говорится 'settings.py', подразумеваются ВАШ файл 'settings.py', независимо от того, как он у вас назван, а не один из этих 3х файлов. Изначальная структура проекта, которая готова принять к себе djangobb_forum (app_shows_and_times и app_places используются только для того, чтоб создать ощущение существующего проекта к которому мы добавляем djangobb_forum): /src/bugaga/urls.py """bugaga URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/1.8/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') Including another URLconf 1. Add an import: from blog import urls as blog_urls 2. Add a URL to urlpatterns: url(r'^blog/', include(blog_urls)) """ from django.conf.urls import * from django.conf import settings from django.contrib import admin from django.conf.urls.static import static from djangobb_forum import settings as forum_settings from djangobb_forum.sitemap import SitemapForum, SitemapTopic sitemaps = { 'forum': SitemapForum, 'topic': SitemapTopic, } urlpatterns = patterns('', # Admin url(r'^admin/', include(admin.site.urls)), # Sitemap url(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}), #My_Apps url(r'^places/', include('app_places.urls')), url(r'^shows/', include('app_shows_and_times.urls')), # DjangoBB_Forum url(r'^forum/account/', include('allauth.urls')), url(r'^forum/', include('djangobb_forum.urls', namespace='djangobb')), ) # PM Extension if (forum_settings.PM_SUPPORT): urlpatterns += patterns('', url(r'^forum/pm/', include('django_messages.urls')), ) if (settings.DEBUG): urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) /src/bugaga/settings/development.py # -*- coding: utf-8 -*- import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) DEBUG = True TEMPLATE_DEBUG = DEBUG #print ("base dir path", BASE_DIR) ADMINS = ( # ('Your Name', 'your_email@domain.com'), ) MANAGERS = ADMINS DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'name_of_db', 'USER': 'login_to_db', 'PASSWORD': 'pass_to_db', 'HOST': 'localhost', 'PORT': '', } } # Internationalization # https://docs.djangoproject.com/en/1.8/topics/i18n/ # Language code for this installation. All choices can be found here: # http://www.i18nguy.com/unicode/language-identifiers.html LANGUAGE_CODE = 'ru-RU' LANGUAGES = ( ('ca', 'Catalan'), ('cs', 'Czech'), ('de', 'German'), ('en', 'English'), ('es', 'Spanish'), ('fo', 'Faroese'), ('fr', 'France'), ('it', 'Italian'), ('lt', 'Lithuanian'), ('mn', 'Mongolian'), ('nl', 'Dutch'), ('pl', 'Polish'), ('ru', 'Russian'), ('uk_UA', 'Ukrainian'), ('vi', 'Vietnamese'), ('zh_CN', 'Chinese'), ) SITE_ID = 1 # Local time zone for this installation. Choices can be found here: # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name # although not all choices may be available on all operating systems. # If running in a Windows environment this must be set to the same as your # system time zone. TIME_ZONE = 'Europe/Kiev' USE_TZ = True # If you set this to False, Django will make some optimizations so as not # to load the internationalization machinery. USE_I18N = True # If you set this to False, Django will not format dates, numbers and # calendars according to the current locale USE_L10N = True # STATIC_ROOT is where the static files get placed from STATIC_URL and STATICFILES_DIRS # when they are collected by "manage.py collectstatic". Static files are used by Apache\nginx # Don't put anything in this directory yourself; store your static files # in apps' "static/" subdirectories and in STATICFILES_DIRS. #When you’re developing using Django’s development server, you won’t have anything to do with this setting. # Example: "/home/media/media.lawrence.com/static/" STATIC_ROOT = "/home/antonio/projects/bugaga.com/static/" # URL prefix for static files in your apps # Example: "http://media.lawrence.com/static/" STATIC_URL = '/static/' # STATICFILES_DIRS is a setting you use to declare non app-specific static files # You can prefixes for templates, as STATICFILES_DIRS = (("downloads", "/opt/webfiles/stats"),) STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), #'/var/www/static/', ) # List of finder classes that know how to find static files in # various locations. STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', # is default; responsible for STATICFILES_DIRS 'django.contrib.staticfiles.finders.AppDirectoriesFinder', # is default; responsible for $app_name/static/ 'django.contrib.staticfiles.finders.DefaultStorageFinder', ) # Absolute filesystem path to the directory that will hold user-uploaded files. # Example: "/home/media/media.lawrence.com/media/" MEDIA_ROOT = '/home/antonio/projects/bugaga.com/media/' # URL that handles the media served from MEDIA_ROOT. Make sure to use a trailing slash. # Examples: "http://media.lawrence.com/media/", "http://example.com/media/" MEDIA_URL = '/media/' # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'YOUR_SECRET_KEY GENERATED BY DJANGO' # Make this unique, and don't share it with anybody. if not hasattr(globals(), 'SECRET_KEY'): SECRET_FILE = os.path.join(BASE_DIR, 'secret.txt') try: SECRET_KEY = open(SECRET_FILE).read().strip() except IOError: try: from random import choice import string symbols = ''.join((string.lowercase, string.digits, string.punctuation )) SECRET_KEY = ''.join([choice(symbols) for i in range(50)]) secret = file(SECRET_FILE, 'w') secret.write(SECRET_KEY) secret.close() except IOError: raise Exception('Please create a %s file with random characters to generate your secret key!' % SECRET_FILE) MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', #DjangoBB_Forum part 'django.middleware.cache.UpdateCacheMiddleware', 'django.middleware.locale.LocaleMiddleware', 'pagination.middleware.PaginationMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware', 'djangobb_forum.middleware.LastLoginMiddleware', 'djangobb_forum.middleware.UsersOnline', 'djangobb_forum.middleware.TimezoneMiddleware', ) ROOT_URLCONF = 'bugaga.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', # Directories where the engine should look for template source files, in search order. # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". # Always use forward slashes, even on Windows. # Don't forget to use absolute paths, not relative paths. 'DIRS': [os.path.join(BASE_DIR, 'templates')], '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', #DjangoBB_Forum part 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django_messages.context_processors.inbox', #'allauth.account.context_processors.account', #not required since v0.21.0 #'allauth.socialaccount.context_processors.socialaccount', #not required since v0.21.0 'djangobb_forum.context_processors.forum_settings', ], #DjangoBB_Forum part #'loaders': [ # 'django.template.loaders.filesystem.Loader', #is the same as DIRS [] not empty # 'django.template.loaders.app_directories.Loader', #is the same as APP_DIRS = True # 'django.template.loaders.eggs.Loader', #] }, }, ] PREREQ_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] MY_APPS = [ 'app_places', 'app_shows_and_times', ] DJANGOBB_APPS = [ 'django.contrib.sites', #required by django-allauth 'django.contrib.sitemaps', 'django.contrib.admindocs', 'django.contrib.humanize', 'allauth', 'allauth.account', 'allauth.socialaccount', 'allauth.socialaccount.providers.openid', #'allauth.socialaccount.providers.facebook', # at first you need to configure Facebook or # you will get Error: No Facebook app configured: please add a SocialApp using the Django admin 'allauth.socialaccount.providers.google', 'allauth.socialaccount.providers.twitter', 'allauth.socialaccount.providers.vk', 'pagination', 'haystack', 'django_messages', 'nocaptcha_recaptcha', 'djangobb_forum', ] INSTALLED_APPS = PREREQ_APPS + MY_APPS + DJANGOBB_APPS # A sample logging configuration. The only tangible logging # performed by this configuration is to send an email to # the site admins on every HTTP 500 error when DEBUG=False. # See http://docs.djangoproject.com/en/dev/topics/logging for # more details on how to customize your logging configuration. LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'filters': { 'require_debug_false': { '()': 'django.utils.log.RequireDebugFalse' } }, 'handlers': { 'mail_admins': { 'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler' } }, 'loggers': { 'django.request': { 'handlers': ['mail_admins'], 'level': 'ERROR', 'propagate': True, }, } } try: import mailer INSTALLED_APPS += ('mailer',) EMAIL_BACKEND = "mailer.backend.DbBackend" except ImportError: pass try: import south INSTALLED_APPS += ('south',) SOUTH_TESTS_MIGRATE = False except ImportError: pass FORCE_SCRIPT_NAME = '' # Haystack settings HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': os.path.join(BASE_DIR, 'djangobb_forum/djangobb_index'), 'INCLUDE_SPELLING': True, }, } HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor' # Account settings ACCOUNT_ACTIVATION_DAYS = 10 LOGIN_REDIRECT_URL = '/forum/' LOGIN_URL = '/forum/account/login/' AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend', ) # Cache settings CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True # Allauth ACCOUNT_LOGOUT_ON_GET = True ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_SIGNUP_FORM_CLASS = 'bugaga.forms.SignupForm' try: from local_settings import * except ImportError: pass Давайте представим, что у нас есть папка project_name/src гдето в Виртуальной Среде (VirtualEnvironment (вы ведь им пользуетесь? (нормально реализован как встроенное решение в Python начиная с v3.4))), которую мы будем использовать как папку проекта. Скопируйте все содержимое из djangobb_project/basic_project/media/* в /bugaga.com/media/ Скопируйте все содержимое из djangobb_project/basic_project/templates/* в /bugaga.com/src/templates/ Скопируйте djangobb_project/basic_project/forms.py в /bugaga.com/bugaga.com/src/settings/ Скопируйте из djangobb_app/ следующее: папку 'djangobb_forum' файл 'requirements.txt' файл 'requirements_optional.txt' в /bugaga.com/bugaga.com/src/ Сейчас у вас должна быть следующая структура (новые вещи помечены черными стрелками) (на всякий случай — все пункты делаем в консоли). Активируйте свою Виртуальную Среду (она же virtenv) cd '/bugaga.com/bugaga.com/src/' (тут мой путь к проекту) запустите pip install -r requirements.txt (pip, как и virtenv\venv, должен был быть уже давно установлен) pip install -r requirements_optional.txt pip install django-nocaptcha-recaptcha pip install whoosh в /bugaga.com/bugaga.com/src/ создаем файл secret.txt и прописываем любую строку текста на ваше усмотрение, к примеру 'asd423llkmasdi2' Пробуем запустить ./manage.py runsever и открыть http://127.0.0.1:8000/forum/. Возможно, вы получили ошибку вида: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details. Это означает, что вам нужно правильно ввести настройки своей БД в /bugaga.com/bugaga.com/src/settings/settings.py. «Из коробки» (т.е по-умолчанию) у нас следующие настройки БД: . DATABASES = { 'default': { 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 'NAME': '', # Or path to database file if using sqlite3. 'USER': '', # Not used with sqlite3. 'PASSWORD': '', # Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '', # Set to empty string for default. Not used with sqlite3. } } Так как я использую PostgreSQL, предоставляю шаблон настроек для PostgreSQL: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'name_of_db', 'USER': 'login_to_db', 'PASSWORD': 'pass_to_db', 'HOST': 'localhost', 'PORT': '', } } Если вы столкнулись с ошибкой выше, тогда скорее всего вы увидите такую ошибку: django.db.utils.ProgrammingError: relation "djangobb_forum_forum" does not exist LINE 1: ...user"."is_active", "auth_user"."date_joined" FROM "djangobb_… :) Чтоб ее пофиксить, запускаем ./manage.py migrate Далее если видим такую ошибку: django.db.utils.ProgrammingError: relation "auth_user" does not exist -> запускаем ./manage.py migrate auth Если такую: psycopg2.ProgrammingError: relation "django_site" does not exist LINE 1: SELECT (1) AS "a" FROM "django_site" LIMIT 1 -> запускаем ./manage.py migrate sites Запускаем ./manage.py migrate - эта команда смигрирует все остальные приложения\пакеты, таким образом вам не нужно мигрировать по отдельности каждое приложение\пакет. ./manage.py makemigrations ./manage.py migrate Переде тем, как вы сможете открыть в своем браузере форум, вы должны сделать аккаунт форума (./manage.py createsuperuser) иначе получите ошибку: В браузере: User matching query does not exist. В консоли: django.contrib.auth.models.DoesNotExist: User matching query does not exist. Также, чтоб избежать ошибки: ImportError: No module named 'allauth.account.context_processors' -> открываем bugaga.com/bugaga.com/src/settings/settings.py и в секции TEMPLATE_CONTEXT_PROCESSORS комментируем (по средствам символа решетки - #) 2 линии, указанные ниже: # 'allauth.account.context_processors.account', # 'allauth.socialaccount.context_processors.socialaccount', Сейчас вы можете открыть свой форум, но осталась 1 проблема с языками. Чтобы ее пофиксить, переходим в /src/djangobb_forum/ и выполняем django-admin compilemessages Сейчас вы уже все сделали и можете запустить сервер ./manage.py runserver и «Добро пожаловать в DjangoBB_Forum» → http://127.0.0.1:8000/forum/

Комментариев нет:

Отправить комментарий