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()),
]
Рекомендации #
- Flask подходит для небольших приложений, а Django — для крупных и сложных проектов.
- Используйте библиотеку
requests
для выполнения HTTP-запросов. - Для создания API в Django используйте Django REST Framework, чтобы упростить разработку.
- Валидация данных и обработка ошибок играют ключевую роль в разработке API.