Генерация QR кода в Django
QR коды сейчас используются повсеместно, например для одного проекта понадобилась возможность генерации QR кода для каждой страницы сайта с ее адресом.
Ниже я на элементарном примере покажу как сделать генерацию QR кодов в Джанго.
Подготовительный этап
Создадим новое приложение для генерации qr кодов, назовем его qrgenerator:
python manage.py startapp qrgenerator
Дальше надо не забыть добавить приложение в INSTALLED_APPS в файле settings.py, а так же указать урл и папку для медиафайлов, чтобы мы могли сохранять сгенерированные qr коды:
INSTALLED_APPS = [
****
'qrgenerator',
]
****
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR.joinpath('media')
Сразу же создадим в корне папку /media/qr
Дальше создадим в приложении, в папке /templates/qrgenerator/, заготовку HTML шаблона index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Генератор QR кода</title>
</head>
<body>
<h1>Генератор QR кода</h1>
</body>
</html>
В файле views.py приложения qrgenerator добавим:
from django.shortcuts import render
def index(request):
return render(request, 'qrgenerator/index.html')
В файле urls.py проекта добавим:
****
from django.conf.urls.static import static
from django.conf import settings
from qrgenerator.views import index as qr
urlpatterns = [
****
path('qr/', qr, name='qr-generator'),
]
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
Запустим тестовый сервер
python manage.py runserver
И проверим http://127.0.0.1:8000/qr/
Для герерации изображения qr кода нам понядобятся python библиотеки qrcode и Pillow, установим их:
pip install qrcode
pip install pillow
Подготовка закончена.
Генерируем QR код в Джанго
Создадим форму для ввода адреса сайта, добавим в шаблон /templates/qrgenerator/index.html:
<form method="post">
{% csrf_token %}
<h3>Введите адрес сайта</h3>
<input type="text" name="data">
<input type="submit" value="Получить QR код">
</form>
Сюда же, под форму, добавим вывод сгенерированного qr кода:
{% if qr_image %}
<h4>Ваш QR код:</h4>
<img src="/media/qr/test.png">
{% endif %}
Осталось изменить файл views.py проекта qrgenerator следующим образом:
from django.shortcuts import render
import qrcode
def index(request):
qr_image = False
if request.method == "POST":
data = request.POST['data']
img = qrcode.make(data)
img.save("media/qr/test.png")
qr_image = True
return render(request, 'qrgenerator/index.html', {'qr_image': qr_image})
Теперь все готово, запускаем отладочный сервер:
python manage.py runserver
и можно перейти по адресу http://127.0.0.1:8000/qr/ и попробовать сненерировать qr код, я попробовал ввести адрес своего блога:
Теперь в qr коде находится адрес моего блога, если попробовать его отсканировать то попадете на его главную страницу.