Веб-разработка

11. Веб-разработка #

Python широко используется для веб-разработки благодаря удобным библиотекам и фреймворкам. Эта глава охватывает основы взаимодействия с вебом, работу с HTTP, популярные библиотеки и создание REST API.


11.1. Основы работы с HTTP #

HTTP (HyperText Transfer Protocol) — протокол, используемый для передачи данных между клиентом и сервером. Основные понятия:

  • Методы HTTP:
    • GET — запрос данных.
    • POST — отправка данных.
    • PUT/PATCH — обновление данных.
    • DELETE — удаление данных.
  • Коды статуса:
    • 200 OK — успешный запрос.
    • 404 Not Found — ресурс не найден.
    • 500 Internal Server Error — ошибка на стороне сервера.

Пример запроса:

GET /api/resource HTTP/1.1
Host: example.com

11.2. Работа с библиотекой requests #

Библиотека requests упрощает взаимодействие с HTTP-сервисами.

Установка #

pip install requests

Выполнение запросов #

import requests

# Отправка GET-запроса
response = requests.get("https://jsonplaceholder.typicode.com/posts")
print(response.status_code)  # 200
print(response.json())       # JSON-ответ

# Отправка POST-запроса
payload = {"title": "New Post", "body": "This is a test", "userId": 1}
response = requests.post("https://jsonplaceholder.typicode.com/posts", json=payload)
print(response.status_code)  # 201
print(response.json())

Обработка ошибок #

try:
    response = requests.get("https://example.com/nonexistent")
    response.raise_for_status()  # Вызывает исключение при ошибке
except requests.exceptions.HTTPError as e:
    print(f"HTTP error: {e}")

Работа с заголовками #

headers = {"Authorization": "Bearer token123"}
response = requests.get("https://api.example.com/data", headers=headers)
print(response.json())

11.3. Введение в Flask/Django #

Flask #

Flask — легковесный веб-фреймворк для небольших приложений.

Установка #
pip install flask
Пример приложения #
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/", methods=["GET"])
def home():
    return "Hello, Flask!"

@app.route("/api/data", methods=["POST"])
def get_data():
    data = request.json
    return jsonify({"received": data}), 200

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

Запустив этот код, вы получите веб-сервер по адресу http://127.0.0.1:5000.


Django #

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

Установка #
pip install django
Создание проекта #
django-admin startproject myproject
cd myproject
python manage.py runserver

Адрес сервера: http://127.0.0.1:8000.

Пример маршрута #

Добавьте маршрут в файл myproject/urls.py:

from django.http import JsonResponse

def api_view(request):
    return JsonResponse({"message": "Hello, Django!"})

urlpatterns = [
    path("api/", api_view),
]

11.4. Создание REST API #

REST (Representational State Transfer) — стиль проектирования веб-сервисов, основанный на HTTP.

REST API с Flask #

from flask import Flask, jsonify, request

app = Flask(__name__)

# Данные для примера
tasks = [{"id": 1, "title": "Task 1", "done": False}]

@app.route("/tasks", methods=["GET"])
def get_tasks():
    return jsonify(tasks)

@app.route("/tasks", methods=["POST"])
def add_task():
    new_task = request.json
    new_task["id"] = len(tasks) + 1
    tasks.append(new_task)
    return jsonify(new_task), 201

@app.route("/tasks/<int:task_id>", methods=["PUT"])
def update_task(task_id):
    task = next((t for t in tasks if t["id"] == task_id), None)
    if not task:
        return jsonify({"error": "Task not found"}), 404
    task.update(request.json)
    return jsonify(task)

@app.route("/tasks/<int:task_id>", methods=["DELETE"])
def delete_task(task_id):
    global tasks
    tasks = [t for t in tasks if t["id"] != task_id]
    return "", 204

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

REST API с Django REST Framework #

Django REST Framework (DRF) расширяет возможности Django для создания API.

Установка #
pip install djangorestframework
Добавление в настройки Django #

В settings.py добавьте:

INSTALLED_APPS += ["rest_framework"]
Пример API #

Создайте приложение:

python manage.py startapp api

В api/views.py:

from rest_framework.views import APIView
from rest_framework.response import Response

class TaskView(APIView):
    def get(self, request):
        tasks = [{"id": 1, "title": "Task 1", "done": False}]
        return Response(tasks)

    def post(self, request):
        task = request.data
        task["id"] = 2  # Пример присвоения ID
        return Response(task, status=201)

В urls.py проекта:

from api.views import TaskView

urlpatterns += [
    path("api/tasks/", TaskView.as_view()),
]

Рекомендации #

  1. Flask подходит для небольших приложений, а Django — для крупных и сложных проектов.
  2. Используйте библиотеку requests для выполнения HTTP-запросов.
  3. Для создания API в Django используйте Django REST Framework, чтобы упростить разработку.
  4. Валидация данных и обработка ошибок играют ключевую роль в разработке API.