Django 实现图片上传和显示过程详解

作者:大牙啊 时间:2022-06-13 22:22:27 

第1章 新建工程和创建app

新建工程和创建app就不用贴出来了,我这里是测试图片上传的功能能否实现,所以项目都是新的,正常在以有的app下就可以

第2章 模型层:

2.1创建数据库


from django.dbimport models

# Create your models here.
class User(models.Model):
 name= models.CharField(max_length=50)
 # upload_to 指定上传文件位置
 # 这里指定存放在img/ 目录下
 headimg = models.FileField(upload_to="img/")

# 返回名称
 def__str__(self):
   returnself.name

2.2初始化数据库:


(mypy3) ➜ BBS python manage.py makemigrations

Migrations for 'app01':

app01/migrations/0001_initial.py

- Create model User

(mypy3) ➜ BBS python manage.py migrate    

Operations to perform:

Apply all migrations: admin, app01, auth, contenttypes, sessions

第3章 修改配置文件

3.1settings中增加如下配置:


MEDIA_ROOT= os.path.join(BASE_DIR, 'media').replace("\\", "/")
MEDIA_URL = '/media/'

3.2工程的urls文件:


from django.conf.urlsimport url
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
 url(r'^admin/', admin.site.urls),
 # url(r'^regsiter/', views.regsiter),
 # url(r'', TemplateView.as_view(template_name="app01/index.html")),
 path('app01/', include('app01.urls'))
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

3.3app:


from django.urlsimport path
from . import views

app_name = 'app01'
urlpatterns = [
 path('add/', views.add, name='add'),
 # path('index/', views.index, name='index'),
]

3.4修改模版配置:


TEMPLATES= [
 {
   'BACKEND': 'django.template.backends.django.DjangoTemplates',
   'DIRS': [os.path.join(BASE_DIR, 'templates')],
   'APP_DIRS': True,
   'OPTIONS': {
     'context_processors': [
       'django.template.context_processors.debug',
       'django.template.context_processors.request',
       'django.contrib.auth.context_processors.auth',
       'django.contrib.messages.context_processors.messages',
     ],
   },
 },
]

第4章 数据校验模块:

数据需要校验的情况下,如果你不想校验,这个可以忽略

4.1在app下创建forms文件:


from django import forms

# 表单类用以生成表单
class AddForm(forms.Form):
 name = forms.CharField()
 headimg = forms.FileField()

第5章 视图层:

5.1编写图片处理逻辑


from django.shortcutsimport render
from .models import User
from .forms import AddForm

# Create your views here.
def add(request):
 # 判断是否为post 方法提交
 ifrequest.method == "POST":
   af = AddForm(request.POST, request.FILES)
   # 判断表单值是否和法
   ifaf.is_valid():
     name = af.cleaned_data['name']
     headimg = af.cleaned_data['headimg']
     user = User(name=name, headimg=headimg)
     user.save()
     returnrender(request, 'app01/index.html', context={"user":user})
 else:
   af = AddForm()
   returnrender(request, 'app01/add.html', context={"af":af})

第6章 模版层:

上传的html


<!-- templates/users/add.html -->
<!doctype html>
<html>
<head>
 <title>Add</title>
 <meta charset="utf-8">
</head>
<body>
 <h1>Add!</h1>

<form method="post" enctype="multipart/form-data" action="{% url'app01:add' %}">
   {%csrf_token %}
   {{ af.as_p }}
   <inputtype="submit" value="OK"/>
 </form>
</body>
</html>

查看的html


<!-- templates/users/index.html -->
<!doctype html>
<html>
<head>
 <title>Detail</title>
 <meta charset="utf-8">
</head>
<body>
 <p>{{user.name}}</p>
 <img width="50%" height="50%"src="/media/{{ user.headimg }}">
</body>
</html>

来源:https://blog.51cto.com/13520772/2411189

标签:django,图片,上传,显示
0
投稿

猜你喜欢

  • Pytorch 的 LSTM 模型的示例教程

    2021-08-01 22:28:41
  • MySQL适配器PyMySQL详解

    2024-01-16 23:49:11
  • django form和field具体方法和属性说明

    2023-07-24 11:22:45
  • MySQL数据库本地备份和双机相互备份

    2008-05-27 12:25:00
  • python读取并绘制nc数据的保姆级教程

    2023-11-23 02:19:24
  • Go语言学习技巧之如何合理使用Pool

    2024-02-05 08:04:47
  • ASP中页面限权访问的几种方法

    2007-12-13 06:53:00
  • Python实现批量生成,重命名和删除word文件

    2022-12-03 05:51:33
  • Geohash的原理、算法和具体应用探究

    2023-10-06 07:59:44
  • CodeIgniter启用缓存和清除缓存的方法

    2023-11-22 17:04:55
  • 解决py2exe打包后,总是多显示一个DOS黑色窗口的问题

    2022-05-22 21:51:51
  • 基于idea操作hbase数据库并映射到hive表

    2024-01-19 23:22:57
  • pytorch 带batch的tensor类型图像显示操作

    2023-06-02 08:47:26
  • 5分钟快速掌握Python定时任务框架的实现

    2023-05-31 10:19:45
  • 解读ASP.NET 5 & MVC6系列教程(9):日志框架

    2023-06-30 06:10:57
  • 详细讲解如何删除Access数据库中的空记录

    2008-11-28 14:58:00
  • Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】

    2022-01-08 13:53:58
  • 使用 Python 清理收藏夹里已失效的网站

    2023-01-11 01:26:00
  • MYSQL实现连续签到功能断签一天从头开始(sql语句)

    2024-01-22 16:35:11
  • 详解vue-cli项目中怎么使用mock数据

    2024-05-29 22:46:38
  • asp之家 网络编程 m.aspxhome.com