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迭代器的使用方法实例
Nov 21 Python
Python中设置变量作为默认值时容易遇到的错误
Apr 03 Python
Python机器学习之决策树算法
Dec 22 Python
Django rest framework基本介绍与代码示例
Jan 26 Python
python如何实现反向迭代
Mar 20 Python
python实现输入数字的连续加减方法
Jun 22 Python
pycharm远程linux开发和调试代码的方法
Jul 17 Python
win7 x64系统中安装Scrapy的方法
Nov 18 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
Jan 03 Python
详解Python locals()的陷阱
Mar 26 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
Python爬虫设置ip代理过程解析
Jul 20 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中使用curl伪造IP的简单方法
2015/08/07 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
javascript 短路法代码精简
2009/08/20 Javascript
Javascript 自定义类型方法小结
2010/03/02 Javascript
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
javascript date格式化示例
2013/09/25 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
DOM 高级编程
2015/05/06 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
Bootstrap警告框(Alert)插件使用方法
2017/03/21 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
python中常用检测字符串相关函数汇总
2015/04/15 Python
Python图算法实例分析
2016/08/13 Python
python中关于for循环的碎碎念
2017/06/30 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
《与孩子一起学编程》python自测题
2018/05/27 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
2018/12/15 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
python 画条形图(柱状图)实例
2020/04/24 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
Python数据相关系数矩阵和热力图轻松实现教程
2020/06/16 Python
大学生军训自我评价分享
2013/11/09 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
化工专业求职信
2014/07/01 职场文书
实习科室评语
2015/01/04 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
地道战观后感300字
2015/06/04 职场文书
繁星春水读书笔记
2015/06/30 职场文书
宾馆客房管理制度
2015/08/06 职场文书
人民币使用说明书
2019/04/17 职场文书