บางครั้งเราต้องสร้าง QR Code ของ URL ในเว็บไซต์ QR Code ใช้สำหรับยืนยันตัวตน เข้าสู่ระบบ เปิดเว็บไซต์ เป็นต้น บทความนี้จะสอนสร้างเว็บ qrgenerator ใน Django
ตัวอย่าง
สร้างโปรเจกต์ Django และแอป สร้างโฟลเดอร์ media ระดับเดียวกับโปรเจกต์และแอป
ใน settings.py เพิ่มชื่อแอปใน INSTALLED_APPS และเพิ่งท้ายไฟล์:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/') MEDIA_URL = '/media/'
ตั้งค่าโฟลเดอร์ media สำหรับเก็บ QR Code
ใน urls.py ของโปรเจกต์:
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
path("", include("qrgenerator.urls"))
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
ติดตั้งไลบรารี PIL และ qrcode:
pip install PIL pip install qrcode
ใน urls.py ของแอป:
from django.urls import path, include
from . import views
urlpatterns = [
path('', views.home, name='Home'),
]
ใน views.py:
from django.shortcuts import render
from .models import QrCode
def home(request):
if request.method == "POST":
Url = request.POST['url']
QrCode.objects.create(url=Url)
qr_code = QrCode.objects.all()
return render(request, "home.html", {'qr_code': qr_code})
รับ URL สร้างออบเจกต์ QrCode และส่ง QR codes ทั้งหมดไป template
สร้าง templates และ home.html:
<!DOCTYPE html> <html>
<head> <title>tut</title> </head>
<body>
<form method="POST">
{% csrf_token %}
<input type="url" placeholder="URL PLEASE" required name="url">
<button type="submit">get qrcode</button>
</form>
{% for qr in qr_code %}
<img src="{{qr.image.url}}" /><br>
{% endfor %}
</body> </html>
ใน models.py นิยามเมธอด save() เอง:
from django.db import models
import qrcode
from PIL import Image, ImageDraw
from io import BytesIO
from django.core.files import File
import random
class QrCode(models.Model):
url = models.URLField()
image = models.ImageField(upload_to='qrcode', blank=True)
def save(self, *args, **kwargs):
qrcode_img = qrcode.make(self.url)
canvas = Image.new("RGB", (300, 300), "white")
draw = ImageDraw.Draw(canvas)
canvas.paste(qrcode_img)
buffer = BytesIO()
canvas.save(buffer, "PNG")
self.image.save(f'image{random.randint(0,9999)}', File(buffer), save=False)
canvas.close()
super().save(*args, **kwargs)
สร้าง QR code วางบน canvas ขาว เซฟเป็น PNG เก็บใน media folder
เอาต์พุต
