코딩공부/Python Django

KKU likelion django project (5)

integerJI 2020. 1. 2. 12:12

오늘 목표

 

1) 사진 업로드

2) 디자인

 

구글 드라이브에 있는 저번 시간까지 진행한 likelion_4 압축파일과 img폴더를 다운로드하여 수업을 준비합시다.

 

저번 시간까지의 내용

 

 

로그인하여 접속을 한 뒤에 글과 댓글 그리고 좋아요 기능까지 완성되었습니다.

 

이제 글만 쓸수있는 프로젝트에서

 

사진까지 넣을수있게 설정을 해줍니다.

 

먼저 media파일과 static파일을 사용할 수 있게 pillow를 설치하여 줍시다.

 

pip install Pillow

 

pillow를 설치하였다면 static파일을 담을 static폴더를 postapp 아래에 생성하여 줍니다.

 

이제 settings.py에 static의 경로를 알려주게 추가합니다.

 

 

STATICFILES_DIRS = [

    os.path.join(BASE_DIR, 'postapp''static')

]

 

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

 

이제 구글 드라이브에 있던 img폴더안의 파일들을 static폴더에 넣어 줍시다.

 

파일을 넣어 주었다면 collectstatic !

 

python manage.py collectstatic

그렇다면 이제 postproject아래에 static라는 폴더가 새로 생기면서 파일들이 모였습니다!!

 

이제 {% load staticfiles %} 를 상단에 넣어주고 <img src="{% static '파일이름' %}" alt="">을 사용하여 static 파일을 사용할 수 있게 되었습니다.

 

이제 media파일을 건드려 봅시다

 

settings.py아래에 media경로를 설정하여 줍시다.

 

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

MEDIA_URL = '/media/'

postproject/urls.py에 들어가서 url을 수정하여 줍시다.

 

from django.contrib import admin

from django.urls import path, include

 

import postapp.views

 

from django.conf import settings

from django.conf.urls.static import static

 

urlpatterns = [

    path('admin/', admin.site.urls),

    path('', postapp.views.home, name='home'),

    path('post/', include('postapp.urls')),

    path('accounts/', include('accounts.urls')),

]

 

urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

 

이걸로 media파일을 받을 수 있게 설정을 해주었습니다.

 

postapp/models.py에 img파일을 받을 수 있게 폼을 만들어 줍시다.

 

images = models.ImageField(blank=Trueupload_to="usr"null=True)

 

models를 수정하였으니 makemigrations과 migrate!

 

python manage.py makemigrations
python manage.py migrate

 

img파일을 받을수있게 만들어 주었다면 이제 글을 쓸 때 이미지를 추가해줘야 합니다.

 

<br>

<div class="container" enctype="multipart/form-data">

    <form action="{% url 'create' %}">

      <h4>제목: </h4>

      <input type="text" name="title">

      <br>

      <br>

      <h4>본문: </h4>

      <textarea cols=40 rows=10 name="body"></textarea>

      <br>

      <br>

 

      <h4>이미지 :</h4>

      <input type="file" name="images">

      <br>

      <br>

 

      <input class="btn btn-dark" type="submit" value="제출하기">

  </form>

</div>

를 추가하여 폼을 만들고 views.py로 가서 처리를 해줍시다.

 

postapp/views.py

 

def create(request):

    post = Post()

    post.title = request.GET['title']

    post.body = request.GET['body']

    post.pub_date = timezone.datetime.now()

    post.name = User.objects.get(username = request.user.get_username())

    post.images = request.GET['images']

    post.save()

    return redirect('/post/' + str(post.id))

이제 이미지 파일이 업로드되었을 경우에

 

화면에 나타나게 하겠숩니다아아 detail.html로 넘어가요

 

postapp/templates/detail.html

 

 

적절한 위치에 해당 코드를 넣습니다.

 

{% if post.images %}

<img width="100%" style="height: 50%" src="{{ post.images.url }}" >

{% else %}

이미지가 없습니다.

{% endif %}

<br>

포스트 모델에 이미지가 있다면

 

해당 이미지를 출력하고 이미지가 없다면

 

이미지가 없다는 문자열을 출력합니다.

'코딩공부 > Python Django' 카테고리의 다른 글

KKU likelion django project (6)  (0) 2020.01.02
KKU likelion django project (5) 번외  (0) 2020.01.02
KKU likelion django project (4)  (0) 2020.01.02
KKU likelion django project (3)  (0) 2020.01.02
KKU likelion django project (2)  (0) 2020.01.02