일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Django Nodejs 차이점
- 입/출력
- 프레임워크와 라이브러리의 차이
- iOS14
- 장고란
- EOF
- 이분그래프
- 입출력 패턴
- correlation coefficient
- 매크로
- 알고리즘 공부방법
- string 함수
- string 메소드
- getline
- c++
- UI한글변경
- Django란
- 연결요소
- 엑셀
- 시간복잡도
- vscode
- 구조체와 클래스의 공통점 및 차이점
- scanf
- double ended queue
- 자료구조
- 2557
- Django의 편의성
- 백준
- 표준 입출력
- k-eta
- Today
- Total
Storage Gonie
46. (app3) photo form 만들기(사진 업로드 페이지) / login 템플릿 수정(로그인 성공시 바로 이전페이지로 이동) 본문
46. (app3) photo form 만들기(사진 업로드 페이지) / login 템플릿 수정(로그인 성공시 바로 이전페이지로 이동)
Storage Gonie 2019. 2. 23. 03:401. froms.py에서 Photo 모델을 imprt해주고 UploadFrom을 추가해준다.
from .models import Photo
# 사진 업로드 폼
class UploadForm(forms.ModelForm):
comment = forms.CharField(max_length=255)
class Meta:
model = Photo # 어떤 모델과 연결할지
exclude = ('thumnail_image', 'owner') # 입력받지 않을 필드를 표시가능, 이 부분은 코드로 처리해주기 위해
2. views.py에서 UploadForm 를 import해주고 upload 메소드를 추가해줌
from .forms import CreateUserForm, UploadForm
def upload(request):
form = UploadForm()
return render(request, 'kilogram/upload.html', {'form', form})
3. templates/kilogram/upload.html 생성
- 대용량 데이터인 이지미파일을 보낼 때는 enctype을 꼭 지정해줘야한다.
{% extends 'kilogram/base.html' %}
{% block content %}
<h1>Kilogram Main Upload</h1>
<form action = "{% url 'kilogram:upload' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="Upload"/>
</form>
{% endblock %}
4. kilogram/urls.py에서 url을 추가해준다.
url(r'^upload$', views.upload, name='upload'),
5. views.py의 upload 메소드 수정, redirect모듈 import
- 폼 화면만 보여줄 수 있던 것을 실제로 저장할 수 있도록 만드는 과정
from django.shortcuts import render, redirect
def upload(request):
form = UploadForm()
return render(request, 'kilogram/upload.html', {'form', form})
def upload(request):
if request.method == "POST":
form = UploadForm(request.POST, request.FILES) # 대용량인 이미지를 처리해야 하므로 두 매개변수를 넘겨줘야함.
if form.is_valid():
photo = form.save(commit=False) # photo객체를 가져오긴 하나 DB에 아직 저장하진 않음
photo.owner = request.user # request.user는 로그인한 사용자
form.save()
return redirect('kilogram:index')
4. 로그인한 뒤 localhost:8000/kilogram/upload에 접속해서 실제로 사진을 업로드 해본다.
5. admin페이지에서 확인
- 정상적으로 업로드 된 것을 확인할 수 있음.
6. 로그인을 한 사용자만 upload url을 이용할 수 있도록 제한하는 기능
- views.py에서 데코레이터 기능 추가
from django.contrib.auth.decorators import login_required
@login_required # 메소드에만 적용가능
def upload(request):
7. 로그인을 하면 로그인 바로 직전의 페이지가 뜨도록 하는 기능
- kilogram/registration/login.html에서 next의 value를 아래와 같이 채워줌
- 로그인 버튼 클릭 시 get으로 받은 next값을 전달해주도록 수정하는 것임.
<input type="hidden" name="next" value="{{next}}" />
- 로그인 없이 localhost:8000/kilogram/upload에 접속하면 로그인 페이지가 뜨며 이때 화면의 소스코드의 일부를 보면 다음과 같이 채워진 것을 볼 수 있음.
- 이것이 next의 기능.
<input type="hidden" name="next" value="/kilogram/upload" />
'웹개발 > Django 웹서비스 개발(인프런)' 카테고리의 다른 글
48. (app3) Django 소셜로그인 구현하기(페이스북, 다른건 응용가능) (1) | 2019.02.27 |
---|---|
47. (app3) main view 에서 이미지 보여주기 (0) | 2019.02.26 |
45. (app3) Photo 모델 생성 / MEDIA_URL 설정 (0) | 2019.02.22 |
44. (app3) Django id, pw만 입력받는 회원가입에서 email까지 입력받도록 추가 (0) | 2019.02.22 |
43. (app3) Django id, pw만 입력받는 회원가입 구현 (2) | 2019.02.22 |