下面是使用Django实现前台上传并显示图片的完整攻略:
1. 创建项目和应用
首先,我们需要利用Django创建一个项目和一个应用。在终端中执行如下命令:
$ django-admin startproject myproject
$ cd myproject
$ python manage.py startapp myapp
2. 配置数据库
接下来,我们需要配置数据库。在myproject/settings.py文件中,找到DATABASES字典,将其修改为:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
3. 创建模型
在myapp/models.py文件中,创建一个模型类来表示上传的图片:
from django.db import models
class Image(models.Model):
name = models.CharField(max_length=255)
picture = models.ImageField(upload_to='images/')
4. 迁移数据库
在终端中执行如下命令来迁移数据库:
$ python manage.py makemigrations
$ python manage.py migrate
5. 编写视图函数
在myapp/views.py文件中,编写一个视图函数,用于处理前端上传图片的请求,并将其保存到数据库中:
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from myapp.models import Image
@csrf_exempt
def upload(request):
if request.method == 'POST':
name = request.POST.get('name')
picture = request.FILES.get('picture')
Image.objects.create(name=name, picture=picture)
images = Image.objects.all()
return render(request, 'index.html', {'images': images})
6. 编写模板
在myapp/templates/文件夹中,创建一个名为index.html的模板文件。模板文件需要包含一个表单,用于上传图片,并显示所有上传的图片:
<!DOCTYPE html>
<html>
<head>
<title>Django Image Upload and Display</title>
</head>
<body>
<h1>Django Image Upload and Display</h1>
<form action="{% url 'upload' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<label for="name">Name:</label>
<input type="text" name="name" required><br><br>
<label for="picture">Picture:</label>
<input type="file" name="picture" required><br><br>
<input type="submit" value="Upload">
</form>
<hr>
{% if images %}
{% for image in images %}
<div>
<h2>{{ image.name }}</h2>
<img src="{{ image.picture.url }}" alt="">
</div>
{% endfor %}
{% endif %}
</body>
</html>
示例说明1
现在我们来模拟一个上传图片的流程:
- 打开浏览器,输入http://localhost:8000/,进入首页。
- 点击上传按钮,选择一张图片,并填写图片名称。
- 点击提交按钮,跳转到首页,并显示刚刚上传的图片。
示例说明2
现在我们来演示一下如何在其他页面使用上传的图片:
在myapp中新增一个视图函数,用于渲染一个简单页面:
from django.shortcuts import render
def home(request):
return render(request, 'home.html')
在myapp/templates/文件夹中,新增一个名为home.html的模板文件。模板文件需要引用index.html模板,并显示刚刚上传的图片:
{% extends 'index.html' %}
{% block content %}
<h1>Home</h1>
<p>Welcome to my home page.</p>
<hr>
{% if images %}
{% for image in images %}
<div>
<h2>{{ image.name }}</h2>
<img src="{{ image.picture.url }}" alt="">
</div>
{% endfor %}
{% endif %}
{% endblock %}
在myproject/urls.py中,新增一个URLpattern,用于匹配/home/路径:
from django.urls import path
from myapp.views import upload, home
urlpatterns = [
path('', upload, name='upload'),
path('home/', home, name='home'),
]
现在我们来模拟一个访问/home/页面的流程:
- 打开浏览器,输入http://localhost:8000/,进入首页。
- 点击上传按钮,选择一张图片,并填写图片名称。
- 点击提交按钮,跳转到首页,并显示刚刚上传的图片。
- 点击首页的Home链接,跳转到/home/页面,显示刚刚上传的图片。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django实现前台上传并显示图片功能 - Python技术站