基于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+ 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告