Обработка естественного языка с spaCy: анализ и генерация текста 📊
1. Анализ текста с помощью spaCy🔍
1.1. Токенизация и лемматизация
SpaCy предоставляет эффективные инструменты для разбиения текста на токены и определения их базовых форм:
1.2. Определение частей речи
SpaCy автоматически определяет части речи для каждого токена:
1.3. Распознавание именованных сущностей
Библиотека способна выделять в тексте именованные сущности, такие как имена, организации и локации:
2. Генерация текста с использованием spaCy📝
Хотя spaCy в первую очередь предназначен для анализа текста, его можно использовать и для помощи в генерации:
2.1. Использование зависимостей для построения предложений
SpaCy определяет синтаксические зависимости между словами, что может быть использовано для создания новых предложений:
2.2. Использование векторных представлений слов
Векторные представления слов в spaCy могут быть использованы для поиска семантически близких слов:
1. Анализ текста с помощью spaCy
1.1. Токенизация и лемматизация
SpaCy предоставляет эффективные инструменты для разбиения текста на токены и определения их базовых форм:
import spacy
nlp = spacy.load("ru_core_news_sm")
doc = nlp("Кошки любят спать на мягких подушках.")
for token in doc:
print(f"{token.text} -> {token.lemma_}")
1.2. Определение частей речи
SpaCy автоматически определяет части речи для каждого токена:
for token in doc:
print(f"{token.text} - {token.pos_}")
1.3. Распознавание именованных сущностей
Библиотека способна выделять в тексте именованные сущности, такие как имена, организации и локации:
for ent in doc.ents:
print(f"{ent.text} - {ent.label_}")
2. Генерация текста с использованием spaCy
Хотя spaCy в первую очередь предназначен для анализа текста, его можно использовать и для помощи в генерации:
2.1. Использование зависимостей для построения предложений
SpaCy определяет синтаксические зависимости между словами, что может быть использовано для создания новых предложений:
def generate_sentence(subject, verb, object):
doc = nlp(f"{subject} {verb} {object}")
return " ".join([token.text for token in doc])
print(generate_sentence("Программист", "пишет", "код"))
2.2. Использование векторных представлений слов
Векторные представления слов в spaCy могут быть использованы для поиска семантически близких слов:
def find_similar_word(word, n=3):
token = nlp(word)[0]
similar_words = []
for lex in nlp.vocab:
if lex.has_vector:
if lex.is_lower == token.is_lower and lex.is_alpha:
similarity = token.similarity(lex)
similar_words.append((lex.text, similarity))
return sorted(similar_words, key=lambda x: x[1], reverse=True)[:n]
print(find_similar_word("компьютер"))
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2❤🔥1
GeoPandas расширяет функциональность pandas, добавляя поддержку геометрических типов данных. Это позволяет эффективно работать с пространственными данными, выполнять геометрические операции и визуализировать результаты.
Ключевые особенности:
- Поддержка различных форматов геоданных (Shapefile, GeoJSON и др.)
- Геометрические операции (пересечение, объединение, буферизация)
- Пространственные соединения и агрегации
- Интеграция с matplotlib для визуализации
Установка GeoPandas производится через pip:
pip install geopandas
После установки можно приступать к работе:
import geopandas as gpd
# Чтение геоданных
gdf = gpd.read_file('path/to/your/geodata.shp')
# Базовые операции
print(gdf.head())
print(gdf.crs) # Система координат
🛠 Практические примеры использования
1. Визуализация данных
GeoPandas позволяет легко визуализировать геоданные:
import matplotlib.pyplot as plt
gdf.plot()
plt.title('Визуализация геоданных')
plt.show()
2. Пространственные операции
Выполнение геометрических операций, таких как буферизация:
buffered = gdf.geometry.buffer(1) # Создание буфера в 1 единицу
3. Пространственные соединения
Объединение двух наборов геоданных на основе их пространственных отношений:
cities = gpd.read_file('cities.shp')
countries = gpd.read_file('countries.shp')
cities_with_countries = gpd.sjoin(cities, countries, how="inner", predicate="within")Использование GeoPandas предоставляет ряд преимуществ:
- Эффективная обработка больших объемов геоданных
- Интеграция с экосистемой Python для анализа данных
- Упрощение сложных геопространственных операций
- Возможность создания высококачественных картографических визуализаций
Источник: Python Hub - сборище Питонистов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Python укрепляет лидерство в рейтинге TIOBE 🥇
Согласно последнему индексу TIOBE, Python продолжает укреплять свои позиции как самый популярный язык программирования. За месяц его доля выросла с 16,12% до 18,04%, что является значительным скачком.
Генеральный директор TIOBE Software Пол Янсен отмечает:
Ключевые моменты:
- Python опережает C++ на рекордные 8%
- Rust и Kotlin названы потенциальными конкурентами в будущем
- Kotlin поднялся с 27-го на 18-е место за год
- Go также набирает популярность
Стоит отметить, что TIOBE — не единственный источник данных о популярности языков. Например, по данным опроса Stack Overflow, расстановка сил немного отличается.
Статистика по другим яп читать тут
Источник: Python Hub - сборище Питонистов👩💻
Согласно последнему индексу TIOBE, Python продолжает укреплять свои позиции как самый популярный язык программирования. За месяц его доля выросла с 16,12% до 18,04%, что является значительным скачком.
Генеральный директор TIOBE Software Пол Янсен отмечает:
"Вероятно, Python станет самым популярным языком программирования в истории"
Ключевые моменты:
- Python опережает C++ на рекордные 8%
- Rust и Kotlin названы потенциальными конкурентами в будущем
- Kotlin поднялся с 27-го на 18-е место за год
- Go также набирает популярность
Стоит отметить, что TIOBE — не единственный источник данных о популярности языков. Например, по данным опроса Stack Overflow, расстановка сил немного отличается.
Статистика по другим яп читать тут
Источник: Python Hub - сборище Питонистов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
DevGurt — для тех, кто живет кодом и дышит переменными.
Для питонистов есть свой отдельный уголок счастья — Python Hub.
📖 Лень читать тут? Забегай на devgurt.com, там уже есть статьи, которые помогут тебе победить любые баги. Кстати, авторы статей в скором времени смогут их монетизировать.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
DevGurt - сборище Программистов
Сообщество тех, кто живет кодом и дышит переменными.
https://t.me/pythonhub001 - cборище питонистов
https://t.me/pythonhub_chat - чат
Сотрудничество: @leshunist
https://t.me/pythonhub001 - cборище питонистов
https://t.me/pythonhub_chat - чат
Сотрудничество: @leshunist
👍4
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
TELEGRAM БОТ с БАЗОЙ ДАННЫХ SQLite на Python | AIOgram | Регистрация
В этом видео мы разберем, как написать телеграм бота, который будет сохранять всех пользователей в базу данных. Использовать будем язык программирования Python, библиотеку для бота AIOgram, а библиотеку для базы данных aioSQLite. (Она асинхронная, в отличие…
👍8
Решил повторно проверить, какие вообще самые популярные (по каким-то критериям, хз сам каким) библиотеки на PyPi
PyPI (Python Package Index) — это официальный репозиторий пакетов для языка программирования Python. Здесь собраны тысячи библиотек, модулей и приложений, которые могут быть полезны для разработчиков Python.
Перейти к стате
Для ленивых предлагаю скрин!
Источник: Python Hub - сборище Питонистов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2👎1
Множество в Python - это неупорядоченная коллекция уникальных элементов. Представьте себе мешок с разноцветными шариками, где каждый цвет встречается только один раз. Вот это и есть множество!
Создать множество очень просто:
colors = {"red", "blue", "green"}
print(colors) # Вывод: {'blue', 'green', 'red'}Заметили, что порядок элементов изменился? Это нормально для множеств - они не сохраняют порядок.
Теперь давайте рассмотрим самые полезные методы для работы с множествами.
Метод add() позволяет добавить новый элемент в множество. Если элемент уже существует, ничего не произойдет.
fruits = {"apple", "banana", "cherry"}
fruits.add("orange")
print(fruits) # Вывод: {'apple', 'banana', 'cherry', 'orange'}
fruits.add("apple") # Ничего не изменится
print(fruits) # Вывод: {'apple', 'banana', 'cherry', 'orange'}Оба метода удаляют элемент из множества, но есть важное различие:
- remove() вызовет ошибку, если элемента нет в множестве
- discard() просто ничего не сделает, если элемента нет
numbers = {1, 2, 3, 4, 5}
numbers.remove(3)
print(numbers) # Вывод: {1, 2, 4, 5}
numbers.discard(10) # Ничего не произойдет
print(numbers) # Вывод: {1, 2, 4, 5}
numbers.remove(10) # Вызовет ошибку KeyErrorМетод union() объединяет два или более множеств. Это как смешать шарики из разных мешков в один большой мешок!
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1.union(set2)
print(set3) # Вывод: {1, 2, 3, 4, 5}Этот метод находит общие элементы между множествами. Представьте, что вы ищете друзей, которые любят и пиццу, и мороженое!
pizza_lovers = {"Алиса", "Боб", "Чарли", "Дэвид"}
ice_cream_lovers = {"Боб", "Чарли", "Ева", "Фрэнк"}
pizza_and_ice_cream = pizza_lovers.intersection(ice_cream_lovers)
print(pizza_and_ice_cream) # Вывод: {'Боб', 'Чарли'}Метод difference() возвращает элементы, которые есть в одном множестве, но отсутствуют в другом.
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
diff = set1.difference(set2)
print(diff) # Вывод: {1, 2, 3}Этот метод возвращает элементы, которые есть в одном из множеств, но не в обоих сразу. Это как найти уникальные предпочтения в группе друзей!
group1 = {"пицца", "бургер", "суши"}
group2 = {"суши", "рамен", "пицца"}
unique_preferences = group1.symmetric_difference(group2)
print(unique_preferences) # Вывод: {'бургер', 'рамен'}Множества в Python - это невероятно полезный инструмент для работы с уникальными элементами и выполнения различных операций над наборами данных.
Источник: Python Hub - сборище Питонистов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
composio-core - это мощная библиотека для Python, предназначенная для упрощения процесса композиции и декомпозиции сложных объектов. Она предоставляет элегантный и интуитивно понятный API, который позволяет разработчикам легко создавать, модифицировать и анализировать сложные структуры данных.Установить библиотеку
composio-core очень просто. Вы можете использовать pip, стандартный менеджер пакетов Python. Вот команда для установки:pip install composio-core
- Гибкая система композиции объектов
- Мощные инструменты для декомпозиции и анализа
- Поддержка асинхронных операций
- Интеграция с популярными фреймворками
- Расширяемая архитектура плагинов
Давайте рассмотрим простой пример использования
composio-core для создания и анализа сложного объекта:from composio_core import Composer, Analyzer
# Создаем композицию
composer = Composer()
complex_object = composer.create({
"name": "Проект X",
"components": [
{"type": "module", "name": "Auth", "version": "1.2.0"},
{"type": "database", "name": "UserDB", "engine": "PostgreSQL"},
{"type": "service", "name": "EmailNotifier", "protocol": "SMTP"}
]
})
# Анализируем созданный объект
analyzer = Analyzer()
analysis_result = analyzer.analyze(complex_object)
print(analysis_result.summary())
print(f"Количество компонентов: {analysis_result.component_count}")
print(f"Типы компонентов: {', '.join(analysis_result.component_types)}")
В этом примере мы создали сложный объект, представляющий структуру проекта, а затем проанализировали его с помощью инструментов
composio-core.Благодаря четкой структуре и интуитивно понятному API, код, использующий
composio-core, становится более читаемым и понятным. Это особенно важно при работе в команде или при поддержке долгосрочных проектов.Библиотека предоставляет множество готовых инструментов для работы со сложными структурами данных, что значительно ускоряет процесс разработки и уменьшает количество потенциальных ошибок.
Архитектура
composio-core позволяет легко расширять функциональность библиотеки с помощью плагинов, что делает ее идеальным выбором для проектов с уникальными требованиями.Помимо базовой функциональности,
composio-core предлагает ряд продвинутых возможностей:### Асинхронная композиция
import asyncio
from composio_core import AsyncComposer
async def create_complex_object():
composer = AsyncComposer()
object = await composer.create_async({
"name": "Async Project",
"components": [
{"type": "api", "name": "UserAPI", "version": "2.0.0"},
{"type": "queue", "name": "TaskQueue", "technology": "RabbitMQ"}
]
})
return object
complex_object = asyncio.run(create_complex_object())
print(complex_object)
composio-core легко интегрируется с популярными Python-фреймворками, такими как Django и Flask. Например, вот как можно использовать библиотеку в Django-проекте:from django.views import View
from django.http import JsonResponse
from composio_core import Composer
class ProjectView(View):
def post(self, request):
composer = Composer()
project = composer.create(request.POST)
return JsonResponse({"project": project.to_dict()})
Библиотека
composio-core представляет собой мощный и гибкий инструмент для работы со сложными структурами данных в Python. Независимо от того, разрабатываете ли вы веб-приложение, систему анализа данных или инструмент для машинного обучения,
composio-core может значительно упростить процесс работы с комплексными объектами и структурами данных.Источник: Python Hub - сборище Питонистов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
🥴4👍1
Что лучше разыграть для любимой подписоты?👨💻
Anonymous Poll
55%
5 победителей по 100 STARS (1$)
11%
1 победитель 500 STARS (5$)
34%
1 победитель ТГ премиум на месяц
👨💻4🥰3
В Python целые числа имеют "бесконечную" точность. Это означает, что вы можете работать с целыми числами любого размера, не беспокоясь о переполнении.
Например, давайте возьмем число 2 и возведем его в степень 1000:
print(2**1000)
Результат:
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
Это число содержит 302 цифры!
В других языках программирования, таких как C или Java, вы бы столкнулись с ограничениями при работе с такими большими числами. Но в Python вы можете спокойно работать с числами практически любого размера.
Это очень удобно для таких областей, как криптография или научные вычисления, где часто требуется работа с очень большими числами.
Однако важно помнить, что хотя Python может обрабатывать такие большие числа, это может повлиять на производительность при выполнении операций с ними. Поэтому, если вам не нужна такая высокая точность, лучше использовать стандартные типы данных.
В целом, эта особенность Python делает его очень мощным инструментом для работы с целыми числами любого размера.
Источник: Python Hub - сборище Питонистов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Forwarded from DevGurt - сборище Программистов
🦀 vs 🐍: Rust против Python – Решающее сравнение скорости и простоты на 2024 год
🚀 Почему Rust?
Rust – это системный язык программирования, известный своей скоростью, безопасностью памяти и абстракциями с нулевой стоимостью. Его часто сравнивают с C/C++, но он более современный и безопасный.
- Безопасность памяти без сборщика мусора: Rust предотвращает проблемы, такие как разыменование нулевых указателей и гонки данных.
- Высокая производительность: Rust компилируется в нативный код, что делает его одним из самых быстрых языков.
- Параллелизм: Система владения Rust гарантирует безопасность потоков.
🐍 Почему Python?
Python – это высокоуровневый интерпретируемый язык, известный своей простотой и читаемостью. Он широко используется в веб-разработке, науке о данных, автоматизации и скриптинге.
- Легкость изучения и использования:Простой синтаксис Python делает его отличным выбором для начинающих и быстрого прототипирования.
- Обширные библиотеки: От машинного обучения до веб-разработки, Python имеет огромную экосистему библиотек и фреймворков.
- Сообщество и поддержка: Сообщество Python огромно, и его поддержка различных случаев использования делает его популярным среди многих разработчиков.
🧑💻 Сравнение примеров кода: Rust vs Python
Рассмотрим простую задачу: чтение файла и подсчет количества строк.
🦀 Пример на Rust:
Сильные стороны Rust
- Безопасность памяти: Оператор
- Скорость: Rust компилируется в нативный код, что делает операции с файлами быстрее.
🐍 Пример на Python:
Сильные стороны Python
- Простота: Код лаконичен и легко читается.
- Удобство использования: Высокоуровневая природа Python делает операции с файлами простыми и требует минимум кода.
⚡️ Сравнение производительности
Читайте в статье
⚙️ Параллелизм и многопоточность
Параллелизм является ключевой сильной стороной Rust благодаря его системе владения, которая обеспечивает безопасность потоков на этапе компиляции. С другой стороны, глобальная блокировка интерпретатора (GIL) Python ограничивает его возможности параллелизма в многопоточных приложениях.
🦀 Пример параллелизма на Rust:
🐍 Пример параллелизма на Python:
🚀 Почему Rust?
Rust – это системный язык программирования, известный своей скоростью, безопасностью памяти и абстракциями с нулевой стоимостью. Его часто сравнивают с C/C++, но он более современный и безопасный.
- Безопасность памяти без сборщика мусора: Rust предотвращает проблемы, такие как разыменование нулевых указателей и гонки данных.
- Высокая производительность: Rust компилируется в нативный код, что делает его одним из самых быстрых языков.
- Параллелизм: Система владения Rust гарантирует безопасность потоков.
🐍 Почему Python?
Python – это высокоуровневый интерпретируемый язык, известный своей простотой и читаемостью. Он широко используется в веб-разработке, науке о данных, автоматизации и скриптинге.
- Легкость изучения и использования:Простой синтаксис Python делает его отличным выбором для начинающих и быстрого прототипирования.
- Обширные библиотеки: От машинного обучения до веб-разработки, Python имеет огромную экосистему библиотек и фреймворков.
- Сообщество и поддержка: Сообщество Python огромно, и его поддержка различных случаев использования делает его популярным среди многих разработчиков.
🧑💻 Сравнение примеров кода: Rust vs Python
Рассмотрим простую задачу: чтение файла и подсчет количества строк.
🦀 Пример на Rust:
use std::fs::File;
use std::io::{self, BufRead};
use std::path::Path;
fn count_lines_in_file(filename: &str) -> io::Result<usize> {
let file = File::open(filename)?;
let reader = io::BufReader::new(file);
let line_count = reader.lines().count();
Ok(line_count)
}
fn main() -> io::Result<()> {
let filename = "example.txt";
let line_count = count_lines_in_file(filename)?;
println!("Файл содержит {} строк.", line_count);
Ok(())
}
Сильные стороны Rust
- Безопасность памяти: Оператор
? обеспечивает правильную обработку ошибок без сбоев.- Скорость: Rust компилируется в нативный код, что делает операции с файлами быстрее.
🐍 Пример на Python:
def count_lines_in_file(filename):
with open(filename, 'r') as file:
return sum(1 for _ in file)
if __name__ == "__main__":
filename = "example.txt"
line_count = count_lines_in_file(filename)
print(f"Файл содержит {line_count} строк.")
Сильные стороны Python
- Простота: Код лаконичен и легко читается.
- Удобство использования: Высокоуровневая природа Python делает операции с файлами простыми и требует минимум кода.
⚡️ Сравнение производительности
Читайте в статье
⚙️ Параллелизм и многопоточность
Параллелизм является ключевой сильной стороной Rust благодаря его системе владения, которая обеспечивает безопасность потоков на этапе компиляции. С другой стороны, глобальная блокировка интерпретатора (GIL) Python ограничивает его возможности параллелизма в многопоточных приложениях.
🦀 Пример параллелизма на Rust:
use std::thread;
fn main() {
let handles: Vec<_> = (0..10).map(|_| {
thread::spawn(|| {
println!("Привет из потока!");
})
}).collect();
for handle in handles {
handle.join().unwrap();
}
}
🐍 Пример параллелизма на Python:
import threading
def hello_from_thread():
print("Привет из потока!")
threads = []
for _ in range(10):
thread = threading.Thread(target=hello_from_thread)
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
❤2👍2
Решил добавить еще отдельный видос про Яндекс.👨💻 🙃
Может кому-то будет полезно.
Гоу смотреть👀
https://youtu.be/hDd0p87VZOI
Может кому-то будет полезно.
Гоу смотреть
https://youtu.be/hDd0p87VZOI
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Яндекс Почта отправляет письма через Python | Yandex Mail
В этом видео мы посмотрим, как отправлять письма через почту, используя почтовый ящик Yandex Mail и язык программирования Python.
🔥 Подписывайся на наш Телеграм-канал про Python 🔥
🖇 https://t.me/pythonhub001 🖇
💻 Не только Python! Канал о технологиях! 💻…
🔥 Подписывайся на наш Телеграм-канал про Python 🔥
🖇 https://t.me/pythonhub001 🖇
💻 Не только Python! Канал о технологиях! 💻…
👍4❤1
Python-библиотека `googlesearch`: Google-поиск прямо из питона 🐍
🔎
Основной функционал
Основной метод библиотеки — это функция
Аргументы функции:
-
-
-
-
-
-
-
-
-
-
💻 Примеры использования
Простой поиск:
Этот код отправляет запрос "Python best practices" и возвращает первые пять ссылок на результаты поиска.
Расширенный поиск с дополнительными параметрами:
Поиск по русскоязычным ресурсам с отключенным безопасным поиском и указанием региона
🚀 В общем,
Лайк, репост, подписка, все по стандарту, помнишь, да?
googlesearch — это простая в использовании библиотека для Python, которая позволяет отправлять запросы в Google и получать ссылки на результаты поиска прямо из вашего кода. Она предоставляет гибкий и мощный интерфейс, который можно настроить для различных задач поиска.Основной функционал
Основной метод библиотеки — это функция
search(), которая возвращает результаты поиска в виде генератора, содержащего объекты SearchResult или URL-ссылки в зависимости от параметров.Аргументы функции:
-
term — строка с запросом, которую вы хотите найти в Google.-
num_results — количество результатов, которые нужно вернуть (по умолчанию 10).-
lang — язык результатов поиска (по умолчанию "en").-
proxy — возможность использования прокси для запросов (по умолчанию None).-
advanced — расширенный режим поиска, возвращает объекты с более детализированной информацией, такими как заголовок и описание страницы (по умолчанию False).-
sleep_interval — время ожидания между запросами в секундах (по умолчанию 0).-
timeout — максимальное время ожидания ответа от Google (по умолчанию 5 секунд).-
safe — настройка безопасного поиска: "off" для отключения, "active" для фильтрации контента для взрослых (по умолчанию "active").-
ssl_verify — возможность включить или отключить проверку SSL-сертификатов (по умолчанию None).-
region — регион для таргетирования поиска (по умолчанию None).Простой поиск:
from googlesearch import search
query = "Python best practices"
for result in search(query, num_results=5):
print(result)
Этот код отправляет запрос "Python best practices" и возвращает первые пять ссылок на результаты поиска.
Расширенный поиск с дополнительными параметрами:
for result in search("новости технологий", num_results=3, lang='ru', safe='off', region='RU', advanced=True):
print(result.title, result.url)Поиск по русскоязычным ресурсам с отключенным безопасным поиском и указанием региона
RU. В данном случае возвращаются не только ссылки, но и заголовки страниц.googlesearch это это мощный инструмент, который позволяет интегрировать Google-поиск в Python-приложения, делая его отличным для автоматизации и поиска данных.Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤3
Шаг 1: Настройка проекта
- Установите Python с официального сайта
- Создайте файлы: app.py templates/index.html`
Шаг 2: Установка библиотек
pip install qrcode Flask
Шаг 3: Написание кода
Откройте файл app.py и добавьте следующий код:
import qrcode
from flask import Flask, request, render_template, send_file
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def generate_qr():
if request.method == "POST":
data = request.form["data"]
qr_img = qrcode.make(data)
qr_path = "static/qr_code.png"
qr_img.save(qr_path)
return send_file(qr_path, mimetype='image/png')
return render_template("index.html")
if __name__ == "__main__":
app.run(debug=True)
Теперь откройте файл templates/index.html и добавьте следующий HTML-код:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>QR-код генератор</title>
</head>
<body>
<h1>QR-код генератор</h1>
<form method="POST">
<input type="text" name="data" placeholder="Введите текст или URL">
<button type="submit">Сгенерировать QR-код</button>
</form>
{% if qr_code %}
<img src="{{ qr_code }}" alt="QR-код">
{% endif %}
</body>
</html>
Запустите приложение командой:
python app.py
Откройте браузер и перейдите по адресу http://127.0.0.1:5000. Вы увидите форму для ввода текста или URL. После ввода данных и нажатия кнопки "Сгенерировать QR-код", вы получите изображение с QR-кодом.
Источник: Python Hub - сборище Питонистов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
Веб-приложение - это программное обеспечение, которое работает в веб-браузере. Основные характеристики веб-приложений включают:
- Независимость от платформы
- Работа на любом устройстве, включая мобильные
- Зависимость от интернет-соединения (как минимум для начальной загрузки)
- Динамический контент с частыми обновлениями
Веб-приложения создаются с использованием различных технологий:
- Фронтенд: HTML, CSS и JavaScript
- Бэкенд: Node.js, Python (с Django или Flask), Java и другие
- Базы данных: SQL и NoSQL варианты (например, MongoDB, PostgreSQL)
Многие популярные сервисы, которые мы используем ежедневно, являются веб-приложениями:
- Gmail
- Google Документы
- Trello
- Slack
- Онлайн-банкинг
Веб-приложения имеют преимущество в виде встроенных функций безопасности, таких как HTTPS для шифрования передаваемых данных. Это освобождает разработчиков от необходимости создавать меры безопасности с нуля.
Типичное время загрузки веб-приложений:
- Первая загрузка: около 7-8 секунд
- Последующие загрузки: около 1 секунды (благодаря кэшированию)
Многие компании используют гибридный подход:
- Веб-сайт для презентации и продажи идеи (оптимизирован для SEO)
- Веб-приложение для основного продукта (оптимизировано для удобства пользователей)
Веб-приложения имеют ряд преимуществ, которые делают их важными в современном мире:
- Доступность с любого устройства с браузером
- Не требуют установки и обновления на устройстве пользователя
- Легко обновляются и поддерживаются разработчиками
- Обеспечивают единообразный пользовательский опыт на разных платформах
Источник: Python Hub - сборище Питонистов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
В этой статье мы рассмотрим, как можно эффективно интегрировать React с Django, не создавая полноценное SPA-приложение.
Многие статьи рекомендуют создавать полноценный React SPA и использовать Django только как REST API. Однако такой подход имеет ряд недостатков, особенно для небольших проектов:
- Дублирование кода (маршрутизация, аутентификация, авторизация)
- Необходимость создания отдельных страниц ошибок
- Дублирование состояний и моделей данных
Хотя для некоторых проектов это может быть приемлемым решением, для моего небольшого приложения такой подход кажется излишним.
Идея заключается в том, чтобы использовать React не как полноценный фронтенд-фреймворк, а как шаблонизатор для Django. Это позволит нам сохранить преимущества обоих инструментов.
1. Точки монтирования React
React имеет удобное свойство: он монтируется не просто в
body DOM или случайное место, а именно в указанный вами элемент. Мы можем использовать это для реализации маршрутизации, используя одну точку монтирования для каждой страницы:ReactDOM.render(
<h1>Страница 1!</h1>,
document.getElementById('page-1')
);
ReactDOM.render(
<h1>Страница 2!</h1>,
document.getElementById('page-2')
);
2. Маршрутизация на стороне Django
На стороне Django нам нужно только отрендерить
<div> с соответствующим идентификатором:{% extends "base.html" %}
{% load static %}
{% block content %}
<div id="{{ element_id }}"></div>
<script src="{% static 'index.js' %}"></script>
{% endblock %}3. Оптимизация размера пакета
Чтобы не загружать JavaScript для неиспользуемых страниц, мы можем использовать встроенную функцию React - Code Splitting:
let Page1 = React.lazy(() => import('./page1'))
let Page2 = React.lazy(() => import('./page2'))
ReactDOM.render(
<Suspense fallback={<></>}>
<Page1/>
</Suspense>,
document.getElementById('page-1')
);4. Передача контекстных данных
Для передачи данных из Django в React мы можем использовать встроенный в Django тег
json_script:{% extends "base.html" %}
{% load static %}
{% block content %}
<div id="{{ element_id }}"></div>
{{ page_context | json_script:'page-context' }}
<script src="{% static 'index.js' %}"></script>
{% endblock %}На стороне React мы можем получить эти данные с помощью пользовательского хука:
export let usePageContext = <T = any>() => {
let [pageContext, setPageContext] = useState<T | undefined>(undefined)
useEffect(() => {
let pageContext = document.getElementById('page-context').textContent
setPageContext(JSON.parse(pageContext))
}, [])
return pageContext as T
}
const TodosIndexPage = memo(() => {
let pageContext = usePageContext<{ todos: Todo[] }>()
let todos = pageContext?.todos
return <>
<h1>React todos page</h1>
<ul>
{todos?.map(todo => <li key={todo.id}>{todo.title}</li>)}
</ul>
</>
})Этот подход позволяет использовать React как шаблонизатор для Django, сохраняя при этом простоту разработки и избегая дублирования кода. Основные шаги для реализации:
- Создание отдельных точек монтирования для React
- Настройка разделения кода для оптимизации производительности
- Реализация маршрутизации на стороне Django
- Передача контекста страницы из Django в React
- Получение и использование контекста страницы на стороне React
Рабочий пример этого подхода можно найти на GitHub в репе этого парня:
https://github.com/kozlovzxc/djangoReactTemplates
Источник: Python Hub - сборище Питонистов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Добавление поддержки нескольких языков в Django может быть сложной задачей для новичков. В этой статье мы рассмотрим пошаговый процесс реализации многоязычности в вашем Django-проекте.
Если у вас еще нет готового проекта Django, вы можете создать новый, выполнив следующие шаги:
virtualenv .env
source .env/bin/activate
pip install django
django-admin startproject languages
cd languages
python manage.py migrate
Убедитесь, что в вашем файле [settings.py](http://settings.py) включены следующие настройки:
USE_I18N = True
USE_L10N = True
Для перевода текста в шаблонах используйте тег {% trans %}:
{% load i18n %}
{% trans "Hello world! This is an HTML5 Boilerplate." %}Для перевода текста в представлениях используйте функцию gettext:
from django.utils.translation import gettext as _
def index(request):
text = _("this is some random text")
return render(request, 'home.html', {'text': text})
Создайте каталог для хранения переводов и выполните команду для создания файлов перевода:
mkdir -p locale
django-admin makemessages --ignore="static" --ignore=".env" -l nl
Отредактируйте файл django.po в созданном каталоге locale, добавив переводы для каждой строки:
#: home/templates/home.html:19
msgid "Hello world! This is an HTML5 Boilerplate."
msgstr "Hallo wereld! Dit is een HTML5 Boilerplate."
После редактирования файлов перевода, скомпилируйте их:
django-admin compilemessages
Добавьте поле для выбора языка в модель пользователя:
LANGUAGE_CHOICES = (
('en-us', 'English'),
('nl', 'Dutch'),
)
language = models.CharField(default='en-us', choices=LANGUAGE_CHOICES, max_length=5)
В представлении активируйте язык на основе настроек пользователя:
from django.utils import translation
def index(request):
if request.user.is_authenticated:
translation.activate(request.user.language)
return render(request, 'home.html')
Следуя этим шагам, вы сможете добавить поддержку нескольких языков в ваш Django-проект. Не забывайте обновлять файлы перевода при добавлении нового текста и компилировать их после внесения изменений.
Оригинал статьи на английском
Источник: Python Hub - сборище Питонистов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1