Django 實現圖片上傳和顯示


第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 pathinclude
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.addname='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.1app下創建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=nameheadimg=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>

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章