Как связать html и python
Перейти к содержимому

Как связать html и python

  • автор:

CGI: пишем простой сайт на Python. Часть 1: Hello world

Python 3 логотип

Проще всего создать динамические страницы на Python при помощи CGI-скриптов. CGI-скрипты — это исполняемые файлы, которые выполняются веб-сервером, когда в URL запрашивается соответствующий скрипт.

Сегодня я расскажу про то, как написать Hello world, как CGI-скрипт.

Настройка локального сервера

В Python уже есть встроенный CGI сервер, поэтому его настройка элементарна.

Для запуска из консоли (для любителей linux-систем). Запускать нужно из той папки, где мы хотим работать:

python3 -m http.server --cgi

Для сидящих на Windows чуть проще будет запуск Python файла (заметьте, что он должен находиться в той же папке, в которой мы планируем работать!):

Теперь откройте браузер и в адресной строке наберите localhost:8000

Если у вас примерно такая же картина, значит, у вас все заработало!

Hello world

Теперь в той папке, где мы запустили сервер, создаём папку cgi-bin (у меня она уже создана).

В этой папке создаём скрипт hello.py со следующим содержимым:

"Первая строка говорит о том, что это Python скрипт (CGI-скрипты можно не только на Python писать).

Вторая строка печатает заголовок. Он обозначает, что это будет html файл (бывает ещё css, javascript, pdf и куча других, и браузер различает их по заголовкам).

Третья строка (просто символ новой строки) отделяет заголовки от тела ответа.

Четвёртая печатает Hello world.

Теперь переходим на localhost:8000/cgi-bin/hello.py

Если у вас не работает, проверьте, установлены ли права на выполнение.

Также в консоли запущенного сервера появляются сообщения об ошибках. Например, убрал скобочку и обновил страницу:

В следующей части мы рассмотрим обработку данных форм и cookies.

Для вставки кода на Python в комментарий заключайте его в теги

  • Модуль csv - чтение и запись CSV файлов
  • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
  • Онлайн-обучение Python: сравнение популярных программ
  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов
  • Сделай свой вклад в развитие сайта!
  • Самоучитель Python
  • Карта сайта
  • Отзывы на книги по Python
  • Реклама на сайте

Как связать HTML и CSS файл с помощью Django?

Я новичок в изучении Django. Я пытался просто связать HTML и CSS файлы в Django, ссылаясь на некоторые сайты и видео, но кажется, что CSS файл не включен. Хотя я пробовал несколько раз, я не получаю цвет фона, который я поместил в CSS файл. CSS файл сохранен в static/css/style.css

body

HTML файл сохранен в templates/bg.html

       BG  "> 

BG Colour

Background Color is to be changed.

Также я настроил статический файл в файле settings.py.

STATIC_URL = '/static/' STATIC_DIRS=[ os.path.join(BASE_DIR,'static') ] 

Вместо "фиолетового" фона я все еще получаю "белый" фон. Пожалуйста, помогите мне исправить это.

Вы обслуживаете свои статические файлы?

Если вы используете manage.py runserver , вы можете добавить это в конец ваших проектов urls.py :

from django.conf import settings from django.contrib.staticfiles.urls import staticfiles_urlpatterns if settings.DEBUG: urlpatterns += staticfiles_urlpatterns() 

Обратите внимание, что Django не обслуживает файлы static и media самостоятельно. Вам нужно будет настроить их отдельно, используя такие вещи, как nginx или whitenoise .

Для управления статическим файлом. Сначала вам необходимо знать development и production настройки.

  • В разработке необходимо установить DEBUG=True в settings.py .
  • В производстве необходимо установить DEBUG=False в settings.py

Развитие

Для обслуживания статического файла в проекте разработки. Вам нужно сделать две вещи .

Первый - изменение файла settings.py . Добавлен этот пример кода.

STATIC_URL = '/static/' if DEBUG: STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), '/static/', ] else: STATIC_ROOT = os.path.join(BASE_DIR, "static") 

Второе изменение - urls.py файл. Добавьте этот пример кода-

## import this at the top from django.contrib.staticfiles.urls import staticfiles_urlpatterns ## bottom of the file `urls.py` if settings.DEBUG: urlpatterns += staticfiles_urlpatterns() 

Вы можете проверить этот проект django. как вы можете изменить свой код Repo Link.

Производство

Для производственной сборки вы должны следовать этому контрольному списку. После выполнения контрольного списка вы можете обслуживать статическое содержимое с помощью nginx веб-сервера. Или вы можете использовать пакет whitenoise python.

  • Настройка статических файлов для работы с NGINX или Средний блог (Настройка статических файлов Django с Nginx) .
  • Использование WhiteNoise с Django.

Думаю, это поможет вам в дальнейшей работе.

Шаг 3. Обслуживание статических файлов, добавление страниц и использование наследования шаблонов с приложением Flask

В предыдущих шагах этого руководства рассматривалось создание минимального приложения Flask с одной страницей автономного HTML. Современные веб-приложения обычно состоят из многих страниц и используют общие ресурсы, такие как файлы CSS и JavaScript, для обеспечения согласованного стиля и реакции на события.

На этом шаге вы научитесь делать следующее:

  • с помощью шаблонов элементов Visual Studio быстро добавлять новые файлы различных типов с удобным стереотипным кодом (шаг 3.1);
  • обрабатывать статические файлы из кода (шаг 3.2, дополнительный);
  • добавлять дополнительные страницы в приложение (шаг 3–3);
  • использовать наследование шаблона для создания заголовка и панели навигации, которая используется на разных страницах (шаг 3–4).

Шаг 3–1. Знакомство с шаблонами элементов

По мере разработки приложения Flask обычно добавляется гораздо больше дополнительных файлов Python, HTML, CSS и JavaScript. Для каждого типа файла (и других файлов, таких как web.config, которые могут понадобиться при развертывании) Visual Studio предоставляет удобные шаблоны элементов для начала работы.

Чтобы просмотреть доступные шаблоны, перейдите к обозревателю решений, щелкните правой кнопкой мыши папку, в которой необходимо создать элемент, выберите Добавить>Новый элемент:

Add new item dialog in Visual Studio

Чтобы использовать шаблон, выберите нужный шаблон, укажите имя файла и нажмите кнопку ОК. При добавлении элемента таким образом автоматически добавляется файл в проект Visual Studio и отмечает изменения для системы управления версиями.

Вопрос. Как Visual Studio определяет, какой шаблон элемента предложить?

Ответ. Файл проекта Visual Studio (PYPROJ) содержит идентификатор типа проекта, который помечает его как проект Python. Visual Studio использует этот тип идентификатора для отображения шаблонов элементов, подходящих для типа проекта. Таким образом Visual Studio может предоставлять богатый набор шаблонов элементов для многих типов проектов, который не требуется отсортировывать каждый раз.

Шаг 3–2. Обработка статических файлов из приложения

В веб-приложении, созданном с помощью Python (с помощью любой платформы), файлы Python всегда выполняются на сервере веб-узла и никогда не передаются на компьютер пользователя. Другие файлы, такие как каскадные таблицы стилей и JavaScript, используются исключительно браузером, поэтому сервер узла просто доставляет их без изменений всякий раз, когда они запрашиваются. Такие файлы называются статическими файлами, Flask может доставлять их автоматически без необходимости написания кода. В HTML-файлах, например, можно ссылаться на статические файлы, используя относительный путь в проекте. Первый раздел в этом шаге служит для добавления файла CSS в существующий шаблон страницы.

Если статический файл требуется предоставлять из кода, например через реализацию конечной точки API, Flask предоставляет удобный метод, который позволяет ссылаться на файлы, используя относительные пути в папке с именем static (в корневом каталоге проекта). Во втором разделе этого шага демонстрируется работа этого метода с помощью простого статического файла данных.

В любом случае можно упорядочить файлы в static так, как вам удобно.

Использование статического файла в шаблоне

Static file structure as shown in Solution Explorer

  1. В обозревателе решений в проекте Visual Studio щелкните папку HelloFlask правой кнопкой мыши, выберите Добавить>Новая папка и назовите папку static .
  2. Щелкните папку static правой кнопкой мыши и выберите Добавить>Новый элемент. В открывшемся диалоговом окне выберите шаблон Таблица стилей, назовите файл site.css и нажмите кнопку ОК. Файл site.css появится в проекте и откроется в редакторе. Структура папки должна выглядеть похоже на структуру на следующем рисунке:
  3. Замените все содержимое site.css следующим кодом и сохраните файл:
.message

Обслуживание статического файла из кода

Flask предоставляет функцию с именем serve_static_file , которую можно вызвать из кода для ссылки на любой файл в папке static проекта. В рамках следующей процедуры создается простая конечная точка API, которая возвращает статический файл данных.

  1. Создайте папку static, если это еще не сделано: в обозревателе решений в проекте Visual Studio щелкните папку HelloFlask правой кнопкой мыши, выберите Добавить>Новая папка и назовите папку static .
  2. В папке static создайте статический файл данных JSON с именем data.json со следующим содержимым (бессмысленный пример данных):

@app.route('/api/data') def get_data(): return app.send_static_file('data.json') 

Вопрос. Существуют ли соглашения для организации статических файлов?

Ответ. Вы можете добавить другие файлы CSS, JavaScript и HTML в свою папку static любым способом. Типичный способ организации статических файлов — это создание вложенных папок fonts, scripts и content (для таблиц стилей и других файлов).

Вопрос. Как обрабатывать переменные URL-адреса и параметры запроса в API?

Шаг 3–3. Добавление страницы в приложение

Добавление еще одной страницы в приложение означает:

  • добавление функции Python, которая определяет представление;
  • добавление шаблона для исправления страницы;
  • добавление необходимой маршрутизации в файл urls.py проекта Flask.

Следующие действия добавляются на странице "Дополнительные сведения" проекта HelloFlask и связывают эту страницу с домашней страницей:

    В обозревателе решений щелкните правой кнопкой мыши папку templates, выберите Добавить>Новый элемент, щелкните шаблон элемента HTML-страница, назовите файл about.html и нажмите кнопку ОК.

Совет Если команда Новый элемент не появляется в меню Добавить, убедитесь, что вы остановили приложение, чтобы среда Visual Studio вышла из режима отладки.

  >  
Home
>
@app.route('/about') def about(): return render_template( "about.html", title = "About HelloFlask", content = "Example app page for Flask.") 

Вопрос. Имеет ли имя функции страницы значение в Flask?

Ответ. Нет, так как URL-адреса, для которых Flask вызывает функцию для получения ответа, определяет декоратор @app.route . Разработчики обычно подбирают имя функции в соответствии с маршрутом, но такое сопоставление необязательно.

Шаг 3–4. Использование наследования шаблона для создания заголовка и навигационной панели

Вместо создания явных навигационных ссылок на каждой странице современные веб-приложения обычно используют заголовок фирменной символики и панель навигации, которая предоставляет самые важные ссылки на страницы, всплывающие меню и т. д. Чтобы обеспечить согласованность приложения, на всех страницах необходимо использовать одинаковые заголовок и панель навигации, однако при этом в каждом шаблоне страницы не должен повторяться один и тот же код. Вместо этого необходимо определить общие компоненты всех страниц в одном месте.

Система шаблонов Flask (по умолчанию Jinja) предоставляет два способа повторного использования определенных элементов в нескольких шаблонах: включение и наследование.

  • Включение. Это другие шаблоны страниц, которые вставляются в определенное место в ссылочном шаблоне, используя синтаксис %> . Кроме того, можно использовать переменную, если необходимо динамически изменять путь в коде. Включение обычно используется в тексте страницы для извлечения общего шаблона в определенном расположении на странице.
  • Наследование. В начале шаблона страницы используется %> для определения общего базового шаблона, на основе которого затем создается ссылочный шаблон. Наследование обычно используется для определения общих макета, панели навигации и других структур для страниц приложения, так что ссылочным шаблонам необходимо только добавлять или изменять определенные области базового шаблона, называемые блоками.

В обоих случаях относится к папке templates приложения ( ../ или ./ также разрешены).

Базовый шаблон отделяет блоки с помощью тегов %> и . Если ссылающийся на него шаблон использует теги с тем же именем блока, содержимое его блока переопределяет содержимое базового шаблона.

Далее демонстрируется наследование:

    В папке templates приложения создайте HTML-файл (с помощью пункта контекстного меню Добавить>Новый элемент или Добавить>HTML-страница) с именем layout.html и замените его содержимое приведенным ниже кодом. Вы увидите, что этот шаблон содержит блок под названием content, который должен быть заменен для всех ссылающихся страниц:

    >   
"

© 2018

.navbar < background-color: lightslategray; font-size: 1em; font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; color: white; padding: 8px 5px 8px 5px; >.navbar a < text-decoration: none; color: inherit; >.navbar-brand < font-size: 1.2em; font-weight: 600; >.navbar-item < font-variant: small-caps; margin-left: 30px; >.body-content

Running app showing the nav bar

  • Запустите сервер для просмотра результатов. После завершения закройте сервер.
  • Так как в приложение были внесены значительные изменения, самое время зафиксировать изменения в системе управления версиями.
  • Следующие шаги

    Изучить тему подробнее можно с помощью следующих ресурсов:

    • Сведения о дополнительных возможностях шаблонов Jinja, таких как поток управления, см. в документации по конструктору шаблонов Jinja (jinja.pocoo.org).
    • Дополнительные сведения об использовании url_for см. в разделе url_for в документации по объекту приложения Flask (flask.pocoo.org).
    • Исходный код, используемый в руководстве, на сайте GitHub: Microsoft/python-sample-vs-learning-flask

    Как связать html с Python?

    У меня есть HTML код, который запускается как веб приложение на aiohttp(python). Как обратиться к данным, которые вводит пользователь? То есть мне необходимо интегрировать введенные данные в мой скрипт на языке Python, как это сделать?

    const sendMessage = () =>
    html < font-family: Verdana, "sans-serif"; >body < min-height: 100vh; background: black no-repeat; >h1 < text-align: center; color: white; text-shadow: 0 3px 5px rgba(150, 150, 150, 0.8); >#root < display: flex; flex-direction: column; align-items: center; >#messages < width: 70%; >.message < background-color: white; width: 100%; padding: 20px; border-radius: 10px; -webkit-transition: 0.3s; -moz-transition: 0.3s; transition: 0.3s; -webkit-box-shadow: 0px 5px 5px 0px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0px 5px 5px 0px rgba(0, 0, 0, 0.1); box-shadow: 0px 5px 5px 0px rgba(0, 0, 0, 0.1); box-sizing: border-box; margin-bottom: 10px; >.message:hover < -webkit-transition: 0.3s; -moz-transition: 0.3s; transition: 0.3s; -webkit-box-shadow: 0 5px 5px 0 rgba(0, 0, 0, 0.5); -moz-box-shadow: 0 5px 5px 0 rgba(0, 0, 0, 0.5); box-shadow: 0 5px 5px 0 rgba(0, 0, 0, 0.5); >.message__created < font-size: 12px; color: darkgrey; text-align: right; >.message__text < font-size: 20px; color: black; margin-top: 5px; >.message__ratings < display: flex; justify-content: space-between; font-size: 16px; font-weight: 400; margin-top: 5px; >.form < width: 70%; margin-bottom: 20px; display: flex; flex-direction: column; gap: 20px; >.form__button < text-align: center; margin-top: 150px; background-color: white; cursor: pointer; >.form__input, .form__button < box-sizing: border-box; width: 100%; font-size: 18px; outline: none; border: none; padding: 20px; border-radius: 15px; -webkit-transition: 0.3s; -moz-transition: 0.3s; transition: 0.3s; -webkit-box-shadow: 0px 5px 5px 0px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0px 5px 5px 0px rgba(0, 0, 0, 0.1); box-shadow: 0px 5px 5px 0px rgba(0, 0, 0, 0.1); >.form__input:focus, .form__button:hover
     

    Port Scanner

    Scan

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *