我制作了一个应用程序来生成条形码,使用Python-条形码库(Python)(django框架)
有两个领域
让用户输入将用于生成条形码的数字。
让用户选择他想要的条形码类型的选项
现在一切正常,它正在生成条形码
但有些条形码有其特定的输入类型,如12位或8位等。
因此,如何检查输入对于该类型的条形码是否有效?,如果错误,则显示错误消息;如果生成精细的,则显示错误消息。
我知道我可以使用django本身的消息,但是如何使用检查函数来实现它呢?
对于views.py
from sre_constants import SUCCESS
from django.http import HttpResponse
from django.shortcuts import redirect, render
import barcode
from barcode.writer import ImageWriter
import tempfile
from django.contrib import messages
def index(request):
context = {'barcode_types':barcode.PROVIDED_BARCODES}
return render(request, 'index.html',context)
def generate_barcode(request):
inputs = request.POST['inputs']
types = request.POST['types']
barcode_class = barcode.get_barcode_class(types)
file = tempfile.NamedTemporaryFile()
code = barcode_class(inputs,writer=ImageWriter())
file_path = code.save(file.name)
response = HttpResponse(open(file_path,'rb').read(), headers={'Content-Type': 'image/png','Content-Disposition': 'attachment; filename="'+inputs+'.png"'})
return response发布于 2022-06-24 19:54:08
您应该使用表单来验证用户输入。
max_length、min_length。IntegerFieldCharFieldFloatFieldrequired=TrueChoiceField如果我正确理解了您的问题,您需要基于inputs验证types,所以根据文件需要覆盖clean函数来执行多字段验证。
表单子类的clean()方法可以执行需要访问多个表单字段的验证。这是您可能会进行检查的地方,例如“如果字段A被提供,字段B必须包含一个有效的电子邮件地址”。如果愿意,此方法可以返回一个完全不同的字典,该字典将用作cleaned_data。
以下是一个例子:
# forms.py
from django import forms
from django.core.exceptions import ValidationError
BARCODE_TYPES =(
# (value, display)
("Code39", "Code 39"),
("Code128", "Code 128"),
("PZN7", "PZN 7"),
("EuropeanArticleNumber13", "EAN-13"),
("EuropeanArticleNumber8", "EAN-8"),
("JapanArticleNumber", "JAN"),
("InternationalStandardBookNumber13", "ISBN-13"),
("InternationalStandardBookNumber10", "ISBN-10"),
("InternationalStandardSerialNumber", "ISSN"),
("UniversalProductCodeA", "UPC-A"),
("EuropeanArticleNumber14", "EAN-14"),
("Gs1_128", "Gs1-128"),
)
class BarcodeForm(forms.Form):
# You can use max_lenth, min_length, ....
inputs = forms.CharField(label='Bacode data', max_length=100, required=True)
types = forms.ChoiceField(label='The Bracode type', choices=BARCODE_TYPES, required=True)
def clean(self):
cleaned_data = super().clean()
inputs = cleaned_data.get("inputs")
types = cleaned_data.get("types")
if types == "Code39":
# validate input for Code39
# Raise error with the message you want on invalid input:
raise ValidationError("Invalid input for Code 39 barcode type, you should ......")
elif types == "Code128":
# validate input for Code128
# Raise error with the message you want on invalid input:
raise ValidationError("Invalid input for Code 128 barcode type, you should ......")
# .....然后在视图中使用以下形式:(文档)
# views.py
from .forms import BarcodeForm
def generate_barcode(request):
# if this is a POST request we need to process the form data
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = BarcodeForm(request.POST)
# check whether it's valid:
if form.is_valid():
# process the data in form.cleaned_data as required
# .....https://stackoverflow.com/questions/72747316
复制相似问题