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 ljust rjust center输出
Sep 06 Python
在Python的框架中为MySQL实现restful接口的教程
Apr 08 Python
Python正则表达式教程之三:贪婪/非贪婪特性
Mar 02 Python
Python实现返回数组中第i小元素的方法示例
Dec 04 Python
python 统计列表中不同元素的数量方法
Jun 29 Python
python爬虫自动创建文件夹的功能
Aug 01 Python
numpy中loadtxt 的用法详解
Aug 03 Python
对python文件读写的缓冲行为详解
Feb 13 Python
Python使用selenium + headless chrome获取网页内容的方法示例
Oct 16 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
Python Serial串口基本操作(收发数据)
Nov 06 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初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
php实现微信支付之退款功能
2018/05/30 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
关于react-router的几种配置方式详解
2017/07/24 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
原生js实现放大镜组件
2021/01/22 Javascript
[56:56]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
Python3的socket使用方法详解
2020/02/18 Python
Python代码需要缩进吗
2020/07/01 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
大学生实习期自我评价范文
2013/10/03 职场文书
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
作文评语怎么写
2014/12/25 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
三八节活动主持词
2015/07/04 职场文书
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL