텍스트 업로드
views.py
def create(request):
new = Diary()
new.title = request.GET['title']
new.body = request.GET['body']
new.pub_time = timezone.datetime.now()
new.save()
return redirect(new)
-
클래스 인스턴스 생성
-
request.GET["html name"]으로 value 가져옴
-
save메소드로 저장
-
get_absolute_url을 이용해 디테일 페이지로 이동
이미지 업로드
models.py
class Diary(models.Model):
title = models.CharField(max_length=20)
image = models.ImageField(upload_to="image/")
body = models.TextField()
created_date = models.DateTimeField(auto_now_add=True)
def get_absolute_url(self):
return resolve_url('diary:detail', self.id)
<form action="{% url 'diary:create' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<h4>제목: </h4>
<input type="text" name="title">
<h4>본문: </h4>
<textarea cols=40 rows=10 name="body"></textarea>
<input type="file" name="image">
<input type="submit" value="제출하기">
</form>
-
form 속성 enctype="multipart/form-data" 추가
-
enctype은 폼 데이터가 서버로 제출될 때 해당 데이터가 인코딩되는 방법
-
multipart/form-data는 파일이나 이미지가 전송될 때 사용
-
method="POST"일 때만 사용 가능
views.py
def create(request):
diary = Diary()
diary.title = request.POST['title']
diary.body = request.POST['body']
diary.image = request.FILES['image']
diary.save()
return redirect(diary)
-
request.FILES로 받으면 됨
-
나머지는 텍스트 업로드랑 동일
장고 폼으로 이미지 업로드
from django import forms
from .models import Diary
class DiaryPost(forms.ModelForm):
class Meta:
model = Diary
fields = "__all__"
def create(request):
if request.method == "POST":
form = DiaryPost(request.POST, request.FILES)
if form.is_valid():
diary = form.save()
return redirect(diary)
else:
form = DiaryPost()
return render(request, "diary/create.html")
else:
form = DiaryPost()
return render(request, "diary/create.html", {"form": form})
-
request.POST와 request.FILES에 데이터가 담겨 있음
-
인자로 받아주면 form.data와 form.files에 각각 대입됨
-
그리고 form.is_bound = True 로 바뀜
-
True여야지 is_valid()가 유효함
'Backend > Python' 카테고리의 다른 글
[인스타그램클론] 폼 에러메시지 표시 (0) | 2020.07.18 |
---|---|
[인스타그램 클론] 단일 페이지에 모델 폼 추가하기 (0) | 2020.06.17 |
[인스타그램 클론] Vanilla JS - AJAX (0) | 2020.06.08 |
중복값 갯수(collections.Counter) (0) | 2020.05.02 |
[인스타그램 클론] 프로필 페이지 (0) | 2020.04.28 |