Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

เว็บไซต์สร้าง QR Code ด้วย Django


บางครั้งเราต้องสร้าง 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

เอาต์พุต

เว็บไซต์สร้าง QR Code ด้วย Django