【发布时间】:2021-01-03 10:48:17
【问题描述】:
我的应用程序适用于提供 ID CNIC 的学生以获取证书。 views.py 中的函数download 需要
- 访问图像(这是一个空白证书)
- 通过添加
name和与cnic关联的毕业date来修改它 - 另存为pdf
- 使其可供下载
所有工作都在 localhost 上进行开发,但是当部署到 Heroku 时,图像的文件路径不存在,这是有道理的,因为该应用不再是本地应用 - 任何人都可以访问它。
问题是,我们如何找到访问Certificate_0001.jpg的新路径,它最初存储在certificates\static\certificates中
Views.py
def download (request, date, name):
x = date.split(" ")
date = f"29 {x[3]} {x[4]}"
try:
image = Image.open("certificates\static\certificates\Certificate_0001.jpg")
except:
return HttpResponse ("image did not load")
font_type = ImageFont.truetype('arial.ttf', 70)
font_type_2 = ImageFont.truetype('arial.ttf', 35)
draw = ImageDraw.Draw(image)
draw.text(xy=(600, 740), text=name, fill=(0,102,0), font=font_type)
draw.text (xy=(330, 1230), text=date, fill=(0,102,0), font=font_type_2)
try:
image.save(f'certificates\static\certificates\{name}.pdf', "PDF", resolution=100.0)
except:
return HttpResponse("pdf did not save")
try:
with open(f'certificates\static\certificates\{name}.pdf', 'rb') as pdf:
response = HttpResponse(pdf.read(), content_type='application/pdf')
response['Content-Disposition'] = f'inline;filename=NFDP-{name}.pdf'
return response
except:
return HttpResponse("pdf did not load")
Settings.py
import os
import django_heroku
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware'
]
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
django_heroku.settings(locals())
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
urls.py
from django.urls import path
from . import views
app_name = "certificates"
urlpatterns = [
path("", views.index, name="index"),
path("download/<str:name>/<str:date>", views.download, name="download")
]
wsgi.py
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nfdp.settings')
application = get_wsgi_application()
【问题讨论】:
标签: django heroku django-models django-views django-urls