Как сделать сайт на Python с нуля: пошаговое руководство

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

Краткий обзор шагов

  1. Подготовка к разработке
  2. Создание базовой структуры проекта
  3. Разработка функционала сайта
  4. Стиль и соблюдение стандартов
  5. Тестирование и отладка
  6. Развертывание сайта

Подготовка к разработке

1.1 Установка Python

Для работы вам понадобится последняя версия Python. Инструкции по установке можно найти на официальном сайте python.org. Убедитесь, что добавили Python в PATH при установке.

$ python --version
Python 3.x.x

1.2 Выбор веб-фреймворка

Существует несколько популярных веб-фреймворков для Python, но наиболее известные — Flask и Django.

  • Flask — это микрофреймворк, который предоставляет минималистический подход к веб-разработке. Он гибок и позволяет разработчикам выбирать, какие компоненты использовать.

  • Django — более комплексный фреймворк, который включает множество встроенных инструментов и готовых решений. Это позволяет быстро запускать проекты, но может потребовать некоторого времени на изучение.

1.3 Установка необходимых библиотек

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

$ python -m venv venv
$ source venv/bin/activate   # для Windows используйте venv\Scripts\activate

Установим Flask, если выбрали его:

(venv) $ pip install Flask

Можно создать requirements.txt для отслеживания зависимостей:

(venv) $ pip freeze > requirements.txt

Создание базовой структуры проекта

2.1 Организация файловой структуры

Рекомендуется следующая базовая структура проекта:

my_project/
├── app/
│   ├── __init__.py
│   ├── routes.py
│   └── templates/
│       └── index.html
├── venv/
├── requirements.txt
├── config.py
└── run.py

2.2 Создание главного приложения

Создайте файл run.py и добавьте следующий код:

from app import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True)

Для Flask создайте файл app/__init__.py:

from flask import Flask

def create_app() -> Flask:
    """
    Создает экземпляр Flask приложения.
    :return: Flask application instance
    """
    app = Flask(__name__)

    with app.app_context():
        # Регистрация маршрутов
        from . import routes

    return app

Разработка функционала сайта

3.1 Настройка маршрутизации

Создайте файл app/routes.py и определите маршруты:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index() -> str:
    """
    Главная страница сайта.
    :return: HTML контент главной страницы
    """
    return render_template('index.html')
Реклама

3.2 Работа с шаблонами

Создайте шаблон app/templates/index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Главная страница</title>
</head>
<body>
    <h1>Добро пожаловать на сайт!</h1>
</body>
</html>

3.3 Интеграция базы данных

Для интеграции базы данных используем SQLAlchemy. Установите библиотеку:

(venv) $ pip install flask_sqlalchemy

Добавьте настройки в app/__init__.py:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app() -> Flask:
    """
    Создает экземпляр Flask приложения.
    :return: Flask application instance
    """
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'

    db.init_app(app)

    with app.app_context():
        # Регистрация маршрутов и моделей
        from . import routes, models

    return app

Создайте модель в app/models.py:

from . import db

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(150), nullable=False, unique=True)

    def __repr__(self) -> str:
        return f'<User {self.username}>'

Стиль и соблюдение стандартов

4.1 Применение PEP 8

PEP 8 — это стиль кодирования для Python. Используйте инструменты проверки, такие как flake8.

(venv) $ pip install flake8
(venv) $ flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics

4.2 Комментирование функций

Используйте docstrings для комментирования функций:

def add(a: int, b: int) -> int:
    """
    Функция складывает два числа.

    :param a: Первое число
    :param b: Второе число
    :return: Сумма чисел
    """
    return a + b

Тестирование и отладка

5.1 Введение в тестирование

Тестирование помогает обеспечить качество кода и избежать ошибок. В Python используйте библиотеку unittest.

5.2 Примеры юнит-тестов

Создайте файл tests/test_basic.py:

import unittest
from app import create_app

class BasicTests(unittest.TestCase):
    def setUp(self) -> None:
        self.app = create_app()
        self.client = self.app.test_client()

    def test_index(self) -> None:
        response = self.client.get('/')
        self.assertEqual(response.status_code, 200)
        self.assertIn(b'Добро пожаловать на сайт!', response.data)

if __name__ == '__main__':
    unittest.main()

Развертывание сайта

6.1 Выбор хостинга

Популярные платформы для Python приложений: Heroku, AWS, DigitalOcean.

6.2 Развертывание на Heroku

Для развертывания на Heroku следуйте следующим шагам:

  1. Установите Heroku CLI:
$ curl https://cli-assets.heroku.com/install.sh | sh
  1. Войдите в Heroku и создайте приложение:
$ heroku login
$ heroku create my-app
  1. Подготовьте файл Procfile:
web: gunicorn run:app
  1. Установите Gunicorn:
(venv) $ pip install gunicorn
  1. Пушьте код в Heroku:
$ git add .
$ git commit -m "Initial commit"
$ git push heroku master

Заключение

Обобщение основных шагов

Мы рассмотрели все важные этапы создания веб-сайта на Python с нуля: от настройки окружения до развертывания.

Призыв к действию

Попробуйте создать свой сайт на Python, следуя этому руководству. Это отличный способ повысить свои навыки и разобраться в современных технологиях веб-разработки.

Дополнительные ресурсы

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


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