基於Django的二維碼生成網站


有時我們需要在網站上生成URL的二維碼。二維碼用於驗證、網站登入、開啟網站等等。在本文中,我們將學習如何實現這一點。我們將建立一個基於Django的**qrgenerator**網站。

示例

建立一個Django專案和一個應用。在專案和應用的同一級別建立一個**media**資料夾。

進入專案資料夾中的**settings.py**,在INSTALLED_APPS中新增應用名稱,並在底部新增以下內容:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'

在這裡,我們設定了**media**資料夾,我們將在這裡儲存我們的二維碼。

在專案目錄的**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)

在這裡,我們定義了應用URL和media資料夾URL。**qrgenerator**是我的應用名稱。

現在安裝兩個庫:**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'),
]

在這裡,我們將我們的主頁檢視渲染到主URL上。

在**views.py**中,新增以下幾行:

from django.shortcuts import render
from .models import QrCode
# Create your views here.
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**模型的物件,在GET處理程式中,我們返回所有二維碼。

在應用目錄(與遷移資料夾同一級別)中建立一個**"templates"**資料夾,並在其中新增一個名為**"home.html"**的檔案,內容如下:

<!DOCTYPE html>
<html>
   <head>
      <title>tut</title>
   </head>
   <body>
      <form method="POST">
         {% csrf_token %}
         <input type="url" placeholder="URL PLEASE" requir
ed name="url">
         <button type= "submit" >get qrcode</button>
      </form>
      {% for qr in qr_code %}
      <img src="{{qr.image.url}}"/><br>
      {%endfor%}
   </body>
</html>

在這裡,我們建立了一個輸入框來獲取URL並將其傳送到後端。在**<form>**下方,我們迴圈遍歷每個二維碼物件並將它們顯示為影像。

進入**models.py**並新增以下幾行:

from django.db import models
import qrcode
from PIL import Image, ImageDraw
from io import BytesIO
from django.core.files import File

# Create your models here.
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)

在這裡,我們定義了自己的save方法,它接受引數。我們使用**qrcode**庫生成二維碼,然後使用畫布將其製作成黑白的。然後我們將二維碼新增到畫布上並將其儲存為影像。我們將影像儲存在media資料夾中並將其新增到模型例項中。

現在,一切都已設定好,您可以繼續檢查輸出。

輸出

更新於:2021年8月26日

2K+ 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.