MTV 패턴 - View
URLconf
- 요청받을 url에 따라 맵핑된 View를 호출
from django.urls import path, include
from . import views
urlpatterns = [
path('admin/', views.adminView, name='admin'),
path('notice/<int:notice_id>', views.noticeView, name='notice'),
path('polls/', include('polls.urls')),
]
→ include를 사용하여 하위의 url파일로 연결시킬 수 있음
→ ex) notice/2 : url을 통해 넘어온 int 타입 2를 변수 notice_id에 넣어서 호출하는 함수 noticeView로 넘김
→ name 파라미터를 사용하여 별칭부여 가능 (별칭은 Template과 redirect() 함수 에서 사용)
from django.urls import path
from . import views
app_name = 'notice'
urlpatterns = [
path('', views.noticeListView, name='notice_list'),
path('<int:notice_id>/', views.noticeDetailView, name='notice_detail'),
path('<int:notice_id>/update/', views.noticeUpdateView, name='notice_update'),
]
<a href="{% url 'notice:notice_update' notice.id %}">공지수정</a>
View
일반뷰
from django.shortcuts import render
from .django.contrib.auth.hashers import make_password
def register(request):
if request.method == 'GET':
return render(request, 'register.html')
else
username = request.POST.get('username')
password = request.POST.get('password')
re_password = request.POST.get('re_password')
res_data = {}
if password != re_password:
res_data['error'] = '비밀번호가 다릅니다.'
else:
user=User(
username=username,
password=make_password(password)
)
user.save()
return render(request, 'register.html', res_data)
→ request.POST[‘username’]보다는 request.POST.get(‘username’) 를 사용할것
(∵ 전자는 key가 없을 때 에러가 발생하지만 후자는 None을 반환함)
지네릭뷰 (링크)
from django.shortcuts import render
Class noticeView(generic.View):
def get(self, request, notice_id):
notice = Notice.objects.get(notice_id)
context = {'notice': notice}
return render(request, 'polls/notice.html', context)
- 결과를 context에 담아서 명시한 Template로 전송함
1. render(request, 템플릿명, context) : 템플릿을 불러올 때 사용, context를 넘길 때 사용
2. redirect(URL) : URL로 이동할 때 사용
print(self.request.POST.get(키값, ‘’))
- 값이 넘어왔나 확인