Create (fbv)
앞에서 작성한 cbv기반 createview를 fbv로 바꿔보겠다.
1. templates.html
create.html을 다 지우기 아까우니까, 그냥 새로 만들어준다.
1)create2.html
- FBV 형식으로 객체를 생성할때에도, 파일이나 이미지를 올리기 위해서
enctype = "multipart/form-data"를 필수로 적어준다.
- cbv방식에서는 따로 method를 적어주지 않았지만,(default = get 방식),
보안상 가려져야하는 정보는 post방식으로 넘겨주는 것이 좋다.
<form action="{% url 'fbv_create' %}" method="POST" enctype = "multipart/form-data" >
{% csrf_token %}
<p>디자이너 생성 페이지</p>
<!--파일 첨부 -->
<input type="file" name='image' placeholder="사진 첨부"><br>
<!-- Email -->
<input type="name" name ='name' placeholder="name"><br>
<!-- Password -->
<input type="adress" name ='adress' placeholder="adress"><br>
<input type="text" name='discription' placeholder="설명">
<div>
<br>
<button type="submit">Create</button>
</div>
</form>
2) urls.py
- create_fbv 함수를 따로 만들어 줄것이기에 미리, urls.py에 선언해 준다.
from django import urls
from django.urls import path
from . import views
urlpatterns = [
# path('',views.home, name ='home'),
path('',views.DesignerList.as_view(), name='designer'),
path('create',views.DesignerCreate.as_view(), name='create'),
path('create_fbv',views.fbvCreate, name='fbv_create'),
path('delete/<int:pk>',views.DesignerDelete.as_view(), name='delete'),
path('update/<int:pk>',views.DesignerUpdate.as_view(), name='update'),
]
3. home.html
- home에서 연결되는 url도 바꿔준다.
<a href="{% url 'fbv_create'%}">
<button>
디자이너 생성
</button>
</a>
2. views.py
- people이라는 Designer 객체 변수를 선언해 준다.
- if 'POST' 방식으로 넘어오지 않았다면, 그냥 create.html 화면을 띄우고
- 'POST'방식으로 넘어오는 데이터가 있다면, people 변수에 값을 넣어준다.
- 파일이나, 이미지를 업로드 하기위해서는 "request.FILES[' ']로 데이터를 핸들링 해야한다."
- 그렇지 않으면 이미지 깨지거나, 아예 불러오지를 못한다.
from django.urls import reverse #revese
from django.shortcuts import redirect, render
#fbv Create
def fbvCreate(request):
people = models.Designer()
if request.method == 'POST':
print("객체생성")
people.name = request.POST['name']
people.adress = request.POST['adress']
people.discription = request.POST['discription']
people.image = request.FILES['image']
people.save()
return redirect(reverse('designer')) #reverse는 url의 name으로 연결시켜준다.
return render(request,'create.html')
'Django > 응용' 카테고리의 다른 글
[Django] 외부 자바스크립트 jquery ajax 통신 csrf token 설정하기 (0) | 2021.08.30 |
---|---|
[Django 게시판] 3. 카카오 지도 맵 api 생성하기(Kakao map api) (0) | 2021.06.14 |
[Django 게시판] 1. generic View를 이용한 CRUD (0) | 2021.06.13 |
Django에 MySQL 연동하기 (DB 연동) (0) | 2021.05.19 |
[Django] GeoJson 파일 파싱하기 (Json이란 무엇일까?) (0) | 2021.05.10 |