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 相关文章推荐
django中模板的html自动转意方法
May 27 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
Feb 18 Python
将Python文件打包成.EXE可执行文件的方法
Aug 11 Python
详解Python3 pandas.merge用法
Sep 05 Python
python字典setdefault方法和get方法使用实例
Dec 25 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
python 日志模块 日志等级设置失效的解决方案
May 26 Python
Numpy实现卷积神经网络(CNN)的示例
Oct 09 Python
详解python第三方库的安装、PyInstaller库、random库
Mar 03 Python
Pygame Rect区域位置的使用(图文)
Nov 17 Python
Pygame Event事件模块的详细示例
Nov 17 Python
浅析python中特殊文件和特殊函数
Feb 24 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写的带缓存数据功能的mysqli类
2012/09/06 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
php基于socket实现SMTP发送邮件的方法
2015/03/05 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
2018/04/21 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
javascript中的几个运算符
2007/06/29 Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
js和jquery实现监听键盘事件示例代码
2020/06/24 Javascript
纯JS代码实现气泡效果
2016/05/04 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
jQuery表格(Table)基本操作实例分析
2017/03/10 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
浅谈Python程序与C++程序的联合使用
2015/04/07 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
2019/10/14 Python
Python如何计算语句执行时间
2019/11/22 Python
python drf各类组件的用法和作用
2021/01/12 Python
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
计划生育证明格式范本
2014/09/12 职场文书
社区党的群众路线教育实践活动总结材料
2014/10/31 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
中学生自我评价范文
2015/03/03 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang