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采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
Python中模拟enum枚举类型的5种方法分享
Nov 22 Python
Python统计单词出现的次数
Apr 04 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
Pandas的read_csv函数参数分析详解
Jul 02 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
Jul 04 Python
Python中print函数简单使用总结
Aug 05 Python
python支持多继承吗
Jun 19 Python
Python pexpect模块及shell脚本except原理解析
Aug 03 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
快速创建python 虚拟环境
Nov 28 Python
python unichr函数知识点总结
Dec 16 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的图形函数中显示汉字
2006/10/09 PHP
php分页函数示例代码分享
2014/02/24 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
php组合排序简单实现方法
2016/10/15 PHP
JS与框架页的操作代码
2010/01/17 Javascript
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
vue实现密码显示隐藏切换功能
2018/02/23 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
vue实现移动端图片上传功能
2019/12/23 Javascript
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
药物学专业学生的自我评价
2013/10/27 职场文书
会计自我鉴定
2013/11/02 职场文书
公司道歉信范文
2014/01/09 职场文书
工商管理专业毕业生求职信
2014/05/26 职场文书
司机岗位职责说明书
2014/07/29 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
安装工程师岗位职责
2015/02/13 职场文书
2015年女职工工作总结
2015/05/15 职场文书
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL