<오늘 한 일>
- 알고리즘 문제 풀이
- write_post 함수 이미지 업로드 가능하게끔 수정
- 일단 이미지 업로드가 가능하게 하려면 SNS/setting.py부터 수정해줘야 한다
# SNS/settings.py
MEDIA_URL = '/media/' # 이미지 URL 설정
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # 이미지 업로드할 때 저장되는 폴더 경로 설정
- 그 다음 SNS/urls.py에도 이미지 업로드 경로를 설정해야 한다
# SNS/urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('user.urls', namespace="user")),
path('post/', include('post.urls', namespace="post")),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
- 그 다음 post/models.py 에서 Post 클래스를 수정해줘야 하는데 이미 image 변수에 이미지필드가 들어가게 설정은 돼있었다 근데 찾아보니까 매개변수? 부분에 upload=""를 다들 써주길래...왜 쓰는지 정확히는 모르겠지만...(다른 블로그에도 따로 설명은 없고 그냥 당연히 쓰는 것처럼 써있었다) 암튼 그래서 추가했다
# post/models.py
# image = models.ImageField(blank=True, null=True)
# ->
image = models.ImageField(blank=True, null=True, upload_to="")
- 매개변수만 수정해서 그런지 python manage.py makemigrations를 해도 바뀐 게 없다고 떴다
- 그 다음 post/views.py를 수정해줄 차례
# post/views.py
@login_required(login_url='')
def write_post(request):
"""게시글을 작성하는 함수"""
if request.method == 'GET':
post_form = PostForm()
return render(request, 'post/write-post.html', {'posts': post_form})
elif request.method == 'POST':
post_form = PostForm(request.POST)
if post_form.is_valid():
write_post = post_form.save(commit=False)
write_post.author = request.user
write_post.save()
# 어디로 이동해야 하는지 모르겠음
return HttpResponseRedirect(reverse('post:postMain'))
- 이미지를 저장하려면 POST 요청이 들어올 때, request.POST만 받는 게 아니라 request.FILES도 받아야 한다고 한다
- 그래서 POST 요청일 때, post_form 변수에 들어갈 내용을 아래와 같이 수정함
post_form = PostForm(request.POST, request.FILES)
- 마지막으로 html 파일을 수정해야 하는데 아직 완성은 아니어서...일단 장고 기초 강의에 나왔던 템플릿에 이미지 파일 업로드하는 버튼을 추가했다
# templates/post/write-post.html
<form action="/write-post/" method="post" enctype="multipart/form-data">
{% csrf_token %}
{% if error %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endif %}
<div class="form-group mb-2">
<textarea class="form-control" style="resize: none" name='my-content'
id="my-content"></textarea>
</div>
<button type="submit" class="btn btn-primary" style="float:right;">작성하기
</button>
</form>
- 원래는 이런 모양인데 내용이 들어가는 곳과 작성하기 버튼 사이에 이미지 업로드 버튼을 추가했다
<div class="form-group mb-2">
<label for="image">사진 추가</label>
<input type="file" class="form-control" name="my-image" id="my-image">
</div>
- 어딘가에 있을 게시글 작성하기 버튼을 누르면 GET요청이 잘 들어가는 걸 확인할 수 있다
- 포스트맨에서 글씨가 잘려서 자꾸 다시 하느라 게시글 3개 작성됨ㅋㅋㅋ
<내일 목표>
- 오전에 팀 프로젝트 html 연결...하기