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 相关文章推荐
在Gnumeric下使用Python脚本操作表格的教程
Apr 14 Python
Python实现的双色球生成功能示例
Dec 18 Python
python实现对文件中图片生成带标签的txt文件方法
Apr 27 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
Django框架实现的简单分页功能示例
Dec 04 Python
python用plt画图时,cmp设置方法
Dec 13 Python
python使用Plotly绘图工具绘制柱状图
Apr 01 Python
Python字符串对象实现原理详解
Jul 01 Python
python__new__内置静态方法使用解析
Jan 07 Python
Python 输出详细的异常信息(traceback)方式
Apr 08 Python
python使用openpyxl库读写Excel表格的方法(增删改查操作)
May 02 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 a simple smtp class
2007/11/26 PHP
PHP 写文本日志实现代码
2010/05/18 PHP
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
Yii的CDbCriteria查询条件用法实例
2014/12/04 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
php实现的日历程序
2015/06/18 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
javascript 写类方式之八
2009/07/05 Javascript
javascript 定义新对象方法
2010/02/20 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
2014/09/03 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
[04:37]DOTA2英雄梦之声Vol20发条
2014/06/20 DOTA
[01:06]DOTA2小知识课堂 Ep.02 吹风竟可解梦境缠绕
2019/12/05 DOTA
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
Python编程快速上手——选择性拷贝操作案例分析
2020/02/28 Python
实现向右循环移位
2014/07/31 面试题
护理专业推荐信
2013/11/07 职场文书
幼师专业求职推荐信
2013/11/08 职场文书
音乐学个人的自荐书范文
2013/11/26 职场文书
致标枪运动员广播稿
2014/02/06 职场文书
出纳试用期自我鉴定
2014/04/07 职场文书
历史学专业求职信
2014/06/19 职场文书
平安建设汇报材料
2014/12/29 职场文书
纪检干部学习心得体会
2016/01/23 职场文书