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


Posted in Python onJuly 18, 2019

第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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python转换摩斯密码示例
Feb 16 Python
python使用socket连接远程服务器的方法
Apr 29 Python
python抓取网页中图片并保存到本地
Dec 01 Python
13个最常用的Python深度学习库介绍
Oct 28 Python
python3学习笔记之多进程分布式小例子
Feb 13 Python
python爬虫selenium和phantomJs使用方法解析
Aug 08 Python
python numpy 反转 reverse示例
Dec 04 Python
Python如何基于smtplib发不同格式的邮件
Dec 30 Python
解决pyCharm中 module 调用失败的问题
Feb 12 Python
Python更新所有已安装包的操作
Feb 13 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
Django框架模型简单介绍与使用分析
Jul 18 #Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 #Python
django 2.2和mysql使用的常见问题
Jul 18 #Python
详解Python二维数组与三维数组切片的方法
Jul 18 #Python
Django框架视图介绍与使用详解
Jul 18 #Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 #Python
使用django实现一个代码发布系统
Jul 18 #Python
You might like
PHP防CC攻击实现代码
2011/12/29 PHP
php错误、异常处理机制(补充)
2012/05/07 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
2016/03/07 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
Vue常见面试题整理【值得收藏】
2018/09/20 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
Python中super关键字用法实例分析
2015/05/28 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
如何在django中添加日志功能
2020/02/06 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
Python如何生成xml文件
2020/06/04 Python
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
美体小铺波兰官方网站:The Body Shop波兰
2019/09/03 全球购物
毕业生在校学习的自我评价分享
2013/10/08 职场文书
偷看我的初中毕业鉴定
2014/01/29 职场文书
体操比赛口号
2014/06/10 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
优秀教育工作者事迹材料
2014/12/24 职场文书
合理化建议书
2015/02/04 职场文书
教师节寄语2015
2015/03/23 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书