基于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文件夹中并将其添加到模型实例中。
现在,一切都已设置好,您可以继续检查输出。