Django Handling Http Request
하나의 URL 에서 GET 과 POST 를 각각 다르게 처리
new, create 함수 결합
As-is
# articles/views.py
def new(request):
form = ArticleForm()
context = {
'form': form,
}
return render(request, 'articles/new.html', context)
def create(request):
form = ArticleForm(request.POST)
if form.is_valid():
article = form.save()
return redirect('articles:detail', article.pk)
context = {
'form': form,
}
return render(request, 'articles/new.html', context)
To-be
# articles/views.py
def create(request):
if request.method == 'POST':
form = ArticleForm(request.POST)
if form.is_valid():
article = form.save()
return redirect('articles:detail', article.pk)
else:
form = ArticleForm()
context = {
'form': form,
}
return render(request, 'articles/create.html', context)
# articles/urls.py
app_name = 'articles'
urlpatterns = [
path('', views.index, name='index'),
path('<int:pk>/', views.detail, name='detail'),
# path('new/', views.new, name='new'),
path('create/', views.create, name='create'),
path('<int:pk>/delete/', views.delete, name='delete'),
path('<int:pk>/edit/', views.edit, name='edit'),
path('<int:pk>/update/', views.update, name='update'),
]
html 파일들에 있는 new url -> create 로 변경
- GET articles/create/ : 게시글 생성 페이지 접속
- POST articles/create/ : 게시글 생성
new, create 함수 결합
As-is
# articles/views.py
def edit(request, pk):
article = Article.objects.get(pk=pk)
form = ArticleForm(instance=article)
context = {
'article': article,
'form': form,
}
return render(request, 'articles/edit.html', context)
def update(request, pk):
article = Article.objects.get(pk=pk)
form = ArticleForm(request.POST, instance=article)
if form.is_valid():
form.save()
return redirect('articles:detail', article.pk)
context = {
'form': form,
}
return render(request, 'articles/edit.html', context)
To-be
# articles/views.py
def update(request, pk):
article = Article.objects.get(pk=pk)
if request.method == 'POST':
form = ArticleForm(request.POST, instance=article)
if form.is_valid():
article = form.save()
return redirect('articles:detail', article.pk)
else:
form = ArticleForm(instance=article)
context = {
'article': article,
'form': form,
}
return render(request, 'update.html', context)
# articles/urls.py
app_name = 'articles'
urlpatterns = [
path('', views.index, name='index'),
path('<int:pk>/', views.detail, name='detail'),
# path('new/', views.new, name='new'),
path('create/', views.create, name='create'),
path('<int:pk>/delete/', views.delete, name='delete'),
# path('<int:pk>/edit/', views.edit, name='edit'),
path('<int:pk>/update/', views.update, name='update'),
]
html 파일들에 있는 edit url -> create 로 변경