Django 实现图片上传和显示过程详解
框架(架构)  /  管理员 发布于 7年前   244
第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 makemigrationsMigrations 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 urlfrom django.contrib import adminfrom django.urls import path, includefrom django.conf.urls.static import staticfrom django.conf import settingsurlpatterns = [ 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 pathfrom . import viewsapp_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 renderfrom .models import Userfrom .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="https:media/{{ user.headimg }}"></body></html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号