Подготовка | |
Домен | |
Docker | |
Python | |
Запуск проекта | |
Ошибки | |
Другие статьи о Python |
На хостинге создаём сайт и прикрепляем к нему домен.
Сначала необходимо подключиться к серверу по SSH:
deniawin@deniawin-Satellite-C850-D2K:~$ ssh denia0d3@matrix.beget.com
Для перехода в виртуальное окружение Docker нужно выполнить следующую команду:
$ ssh localhost -p222
После чего ещё раз ввести пароль для доступа к аккаунту.
denia0d3@localhost's password:
Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 4.0.5-5-beget-acl x86_64)
* Documentation: https://help.ubuntu.com/
(docker) denia0d3@matrix:~ [0] $
Установка Python
Подробнее про установку программ в Linux с помощью configure_make_make-install читайте здесь
(docker) login@server:~ [0] $ mkdir -p .beget/tmp && cd .beget/tmp && wget ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz && tar -xf libffi-3.2.1.tar.gz && cd libffi-3.2.1 && ./configure --prefix=$HOME/.local && make -j $(($(nproc)/3)) && make install && mkdir ~/.local/include && cp x86_64-unknown-linux-gnu/include/ffi.h ~/.local/include/ && cp x86_64-unknown-linux-gnu/include/ffitarget.h ~/.local/include/ (docker) login@server:~ [0] $ cd ~/.beget/tmp && wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz && tar -xf Python-3.7.0.tgz && cd Python-3.7.0 && ./configure --prefix=$HOME/.local && make -j $(($(nproc)/3)) && make install
Затем нужно в .bashrc данного аккаунта прописать $PATH до директории ~/.local/bin/ или алиас для python3,
(docker) andreyolegovich.ru@server:~ [0] $ vi .bashrc
Проверим путь до python3
andreyolegovich.ru@server:~ [0] $ which python3
/home/a/andreyolegovichru/.local/bin//python3
Этот путь нам и нужно прописать в PATH. Отбросим только /python3
PATH=/home/a/andreyolegovichru/.local/bin/:$PATH
И перезапустить .bashrc
source ~/.bashrc
(docker) andreyolegovich.ru@server:~/HelloDjango [0] $ python3 -m django
Type 'python -m django help
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.).
(docker) andreyolegovich.ru@server:~/HelloDjango [0] $ ls
HelloDjango manage.py
(docker) andreyolegovich.ru@server:~/HelloDjango [0] $ python3 manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
February 03, 2019 - 18:50:29
Django version 2.1.5, using settings 'HelloDjango.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
python3 manage.py migrate
Переходим в директорию в которой нужно создать проект. Например в public_html.
Выполняем команду
django-admin startproject Project_Name
После удачного выполнения этой команды создаётся директория
Project_Name , внутри которой будет находится файл manage.py и ещё одна директория
с таким же именем - Project_Name.
Внутри вложенной директории Project_Name находятся файлы
__init__.py
settings.py
urls.py
wsgi.py
WSGI расшифровывается как Web Server Gateway Interface.
Это стандарт взаимодействия между Python-программой, выполняющейся на стороне сервера,
и самим веб-сервером например Apache
Из той же директории в которой находится скрипт manage.py вводим командую
python3 manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
February 06, 2019 - 20:54:38
Django version 2.1.5, using settings 'Project_Name.settings'
Starting development server at http://127.0.0.1:8000/
В каждом проекте (project) обычно используется одно или несколько приложений (application)
Когда все приложения и конфигурации объединены они составляют веб-приложение.
applications + configurations = web application
Создаём первое приложение
python3 manage.py startapp first_app
Появится директория first_app в которой будут следующие файлы
admin.py
apps.py
__init__.py
migrations
models.py
tests.py
views.py
Переходим в директорию Project_Name/Project_Name
Редактируем файл Project_Name/Project_Name/settings.py
Нужно добавить в список установленных приложений наше новое приложение first_app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'first_app',
]
Перезапускаем сервер
python3 manage.py runserver
Если перезапуск осуществляется с помощью скрипта выполняем (насколько я знаю, это актуально для хостингов beget и dreamhost)
(docker) andreyolegovich@server:~/andreyolegovich.ru [0] $ touch tmp/restart.txt
Переходим в директорию с приложением Project_Name/first_app и
редактируем views.py , чтобы создать наш первый view.
Каждый view должен возвращать какойто HttpResponse объект.
Добавляем следущий код в файл Project_Name/first_app/views.py:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello World!")
Теперь нужно привязать этот view к какой-то url
Добавляем следующий код в файл urls.py
from first_app import views.index
urlpatterns = [
path('', views.index, name='index'),
]
Добавляем домен, на котором Вы разворачиваете сайт в ALLOWED_HOSTS файла (из проекта) settings.py
ALLOWED_HOSTS = ['http://www.andreyolegovich.ru','127.0.0.1','localhost','andreyolegovich.ru','www.andreyolegovich.ru']
Project_Name</th> | |||
---|---|---|---|
Project_Name | first_app | templates | |
__init.py__ __pycache__ settings.py connection to first_app by INSTALLED_APPS = ['first_app', ] connection to templates by TEMPLATES_DIR = os.path.join( BASE_DIR, "templates") urls.py wsgi.py |
admin.py apps.py __init.py__ migrations models.py __pycache__ test.py urls.py views.py |
first_app | … |
Python не находит Django |
Disallowed host |
Не работает runserver |
Web application could not be started |
(docker) andreyolegovich.ru@server:~/HelloDjango [0] $ python3 manage.py runserver
Traceback (most recent call last):
File "manage.py", line 8, in <module>
from django.core.management import execute_from_command_line
ModuleNotFoundError: No module named 'django'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 14, in <module>
) from exc
ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?
Причина в том, что в PATH не прописан путь до python. Вернитесь к шагу PATH
Вы можете запустить django с помощью
python3 manage.py runserver
И прописали в settings.py свои хосты, например так
ALLOWED_HOSTS = ['http://www.andreyolegovich.ru','127.0.0.1','localhost','andreyolegovich.ru','www.andreyolegovich.ru']
Но при обращении к домену в браузере появляется ошибка DisallowedHost
DisallowedHost at / Invalid HTTP_HOST header: 'www.andreyolegovich.ru'. You may need to add 'www.andreyolegovich.ru' to ALLOWED_HOSTS. Request Method: GET Request URL: http://www.andreyolegovich.ru/ Django Version: 2.1.5 Exception Type: DisallowedHost Exception Value: Invalid HTTP_HOST header: 'www.andreyolegovich.ru'. You may need to add 'www.andreyolegovich.ru' to ALLOWED_HOSTS. Exception Location: /home/a/andreyolegovichru/.local/lib/python3.7/site-packages/django/http/request.py in get_host, line 106 Python Executable: /home/a/andreyolegovichru/.local/bin/python3.7 Python Version: 3.7.0 Python Path: ['/home/a/andreyolegovichru/andreyolegovich.ru/public_html/HelloDjango', '/home/a/andreyolegovichru/.local/lib/python3.7/site-packages', '/home/a/andreyolegovichru/andreyolegovich.ru', '/opt/passenger40/helper-scripts', '/home/a/andreyolegovichru/.local/lib/python37.zip', '/home/a/andreyolegovichru/.local/lib/python3.7', '/home/a/andreyolegovichru/.local/lib/python3.7/lib-dynload', '/home/a/andreyolegovichru/.local/lib/python3.7/site-packages'] Server time: Sun, 3 Feb 2019 20:07:57 +0000
Проверьте, всё ли правильно прописали в settings.py ALLOWED_HOSTS.
Выключите Django, закройте все консоли подключенные к хостингу или все консоли на локальной машине.
Очистите кэш браузера или откройте url другим браузером.
Если Вы выполняете команду
python3 manage.py runserver
И ничего не происходит, или например, у Вас работал самый первый проект, а запустить
второй не получается - скорее всего дело в хостинге. На нём может быть закрыта
возможность слушать порты и выбор рабочего проекта происходит с помощью
какого-то скрипта.
Если Вы, как и я, пользуетесь
хостингом beget
, тот этот скипт будет называться passenger_wsgi.py и лежать будет
на одном уровне с директорией public_html.
Пропишите в нём
os.environ['DJANGO_SETTINGS_MODULE'] = 'Название_нового_прокта.settings'
Если Вы хотите переключиться между проектами и уже обновили скрипе passenger_wsgi.py но получили ошибку
Web application could not be started
Скорее всего Вы забыли пересоздать файл tmp/restart.txt
(docker) andreyolegovich@server:~/andreyolegovich.ru [0] $ touch tmp/restart.txt
Также советую перепроверить не забыли ли Вы поменть системный путь на нужный Вам проект.
При смене проекта обычно нужно делать два изменения в файле passenger_wsgi.py
# -*- coding: utf-8 -*-
import os, sys
sys.path.insert(0, '/home/a/andreyolegovich/andreyolegovich.ru/public_html/Project_1')
#sys.path.insert(0, '/home/a/andreyolegovich/andreyolegovich.ru/public_html/Project_2')
sys.path.insert(1, '/home/a/andreyolegovich/.local/lib/python3.7/site-packages')
os.environ['DJANGO_SETTINGS_MODULE'] = 'Project_1.settings'
#os.environ['DJANGO_SETTINGS_MODULE'] = 'Project_2.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Ещё одна возможная причина - незаданные переменные в файле manage.py
Если остались вопросы - смело задавайте их в комментариях либо воспользуйтесь поиском по сайту
Рекомендую наш хостинг beget.ru |
Пишите на info@urn.su если Вы: |
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык. |
2. Хотите разместить на сайте рекламу, подходящуюю по тематике. |
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте |
4. Нашли на сайте ошибку, неточности, баг и т.д. ... ....... |
5. Статьи можно расшарить в соцсетях, нажав на иконку сети:
|