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读写文件操作示例程序
Dec 02 Python
Python中字典的基本知识初步介绍
May 21 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
python实现超简单的视频对象提取功能
Jun 04 Python
python机器学习之神经网络实现
Oct 13 Python
Python中的CSV文件使用&quot;with&quot;语句的方式详解
Oct 16 Python
Python单元和文档测试实例详解
Apr 11 Python
Python 切分数组实例解析
Nov 07 Python
python路径的写法及目录的获取方式
Dec 26 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
Jan 10 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
Jun 17 Python
numpy中生成随机数的几种常用函数(小结)
Aug 18 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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
php强制下载类型的实现代码
2011/04/21 PHP
PHP编码规范的深入探讨
2013/06/06 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
设定php简写功能的方法
2019/11/28 PHP
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
Javascript中的相等与不等运算
2010/04/25 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
使用coffeescript编写node.js项目的方法汇总
2015/08/05 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
怎样使用Python脚本日志功能
2016/08/14 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
使用css3绘制出各种几何图形
2016/08/17 HTML / CSS
使用phonegap进行提示操作的具体方法
2017/03/30 HTML / CSS
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
销售自我评价
2013/10/22 职场文书
应用化学专业职业生涯规划书
2014/01/22 职场文书
愚人节活动策划方案
2014/03/11 职场文书
《英英学古诗》教学反思
2014/04/11 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
InterProcessMutex实现zookeeper分布式锁原理
2022/03/21 Java/Android
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL