๋ชฉ์ฐจ
CRUD
(Create Read Update Delete)
์์ฑ, ์ฝ๊ธฐ, ์์ , ์ญ์ ๊ฐ ๊ฐ๋ฅํ ํ์ด์ง๋ฅผ ๊ตฌํํด๋ณด์
Form
CRUD๋ฅผ ์ํด์ ํ์ํ ํ๊ทธ์ด๋ค.
์ด ํ๊ทธ๋ฅผ ์ด์ฉํด์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
์ด๋ฅผ ์ด์ฉํ์ฌ ์์์ ๋ง๋ค์ด ๋ด๊ธฐ๋ ํ๊ณ , ์ ๋ ฅ๋ฐ์ ๋ฐ์ดํฐ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํด๋ผ ์๋ ์๋ค.
1. forms.py ์์ฑ
- ์ดํ๋ฆฌ์ผ์ด์ ๋๋ ํ ๋ฆฌ ๋ด์ ํด๋น ํ์ผ์ ์์ฑํ๋ค.
- form ๋ชจ๋ธ์ ์ฅ๊ณ ๋ก๋ถํฐ ๊ฐ์ ธ์ค๊ณ , ์ดํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ ๋ชจ๋ธ์ ๊ฐ์ ธ์์ผํ๋ค.
์์
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ('title', 'text',)
- class ํํ๋ก ์์์ ํผ์ ๋ง๋ ๋ค.(PostForm)
- 'forms.ModelForm'์ ์ด์ฉํ์ฌ ModelForm์ด๋ผ๋ ๊ฒ์ ๋ช ์ํ๋ค.
- class Meta๋ ํด๋น ํผ์ ๋ง๋ค๊ธฐ ์ํด์ ์ด๋ค model์ด ์ฐ์ฌ์ผ ํ๋์ง ์ฅ๊ณ ์ ์๋ ค์ฃผ๋ ๊ตฌ๋ฌธ์ด๋ค.
๋ํ ์ ๋ ฅ๋ฐ์ ํ๋๋ฅผ ๋ฃ์ด์ค๋ค.
2. urls.py
- ํธ์ง์ ํ ์ ์๋ ํ์ด์ง์ url์ ์์ฑํ๋ค.
3. views.py
- ์ฉ๋์ ๋ง๋ ํจ์๋ฅผ ์์ฑํ๋ค.
- 'form = PostForm()' (์์ฑํ ํผ) ์ ํ์์ผ๋ก form์ ํธ์ถํ๋ค.
4. template
- formํ๊ทธ๋ฅผ ์ด์ฉํ๊ณ {% csrf_token %}์ ํ๊ทธ์ ์ฒซ ์ค์ ๋ฃ์ด์ค๋ค.
{% extends 'blog/base.html' %}
{% block content %}
<h1>New post</h1>
<form method="POST" class="post-form">{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default"><i class="fas fa-save"></i></button>
</form>
{% endblock %}
Create(์์ฑ)
1. forms.py : ์๋ต
2. urls.py
path('post/new/', views.post_new, name='post_new'),
- ์์ฑ์ ํ๋ ๊ฒ์ด๋ฏ๋ก url๊ฒฝ๋ก์ new๋ฅผ ๋ฃ์ด์ฃผ์๊ณ ํด๋น viewํจ์๋ฅผ ํธ์ถํ์๋ค.
3. views.py
def post_new(request):
if request.method == "POST": #๊ธ์ ์ฐ๊ณ ๋ฑ๋ก request
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else: #์ฒ์ ํธ์ถ
form = PostForm()
return render(request, 'blog/post_edit.html', {'form': form})
- request๋ GET, POST์์ฒญ์ด ์๋ค.
1) ์ฒซ ํธ์ถ
- ๊ธ ์์ฑ์ ์ํด ์ฒ์์ผ๋ก ํด๋น ํจ์๋ฅผ ํธ์ถํ ๋์๋ GET์์ฒญ์ด๋ฏ๋ก else๋ฌธ์ผ๋ก ์ด๋ํ๋ค.
- ๊ธ ์ ๋ ฅ์ ๋ฐ๊ธฐ ์ํด์ ๋น์ด์๋ Form๊ณผ ํจ๊ป ํธ์งurl๋ก ์ด๋ํ๋ค.
2) ๊ธ์ ์ ๋ ฅ๋ฐ์ ๋ค ๋ฑ๋ก request
- ๋ ๋ฒ์งธ ํธ์ถ์ ์ ๋ ฅ ๋ฐ์ ํ DB์ ์ ๋ ฅ์ ๋ฐ๋ผ๋ POST์์ฒญ์ด๋ค.
- ์ ๋ ฅ๋ฐ์ ๋ฐ์ดํฐ๋ request.POST์ ๋ด๊ฒจ์ ธ ์์ผ๋ฏ๋ก ํด๋น ๊ฐ์ Form์ ๋ด๊ณ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
- ์ ์์์์๋ post๋ฅผ ์์ ์ ์ฅํ ํ, ์ ์ ์ ๋ณด, ์ถํ ์๊ฐ์ ์ถ๊ฐ๋ก ๊ฐ์ฒด์ ์ ๋ ฅํ ๋ค ์ต์ข ์ ์ฅํ๋ค.
- ์ดํ ํด๋น ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๊ฐ์ง url๋ก ์ด๋ํ๋ค.
4. template: ์๋ต
Update(์์ )
1. forms.py: ์๋ต
2. urls.py
path('post/<int:pk>/edit/', views.post_edit, name='post_edit'),
- ์์ ์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ pk๋ฅผ ์ด์ฉํ์ฌ ์ ๊ทผํ๊ณ ํธ์งํ์ด์ง๋ก ์ด๋ํ๋ค.
3. views.py
def post_edit(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
form = PostForm(request.POST, instance=post)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm(instance=post)
return render(request, 'blog/post_edit.html', {'form': form})
- Create์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น์ทํ์ง๋ง ๋ค๋ฅธ ๋ถ๋ถ์ด ์๋ค.
- ๋ณ์ post์ pk๋ฅผ ์ด์ฉํ์ฌ ์ ๊ทผํ ๋ชจ๋ธ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ค.
- ์์ ์ ํ๋ ๊ฒ์ด๋ฏ๋ก ๊ธฐ์กด ๊ฐ์ฒด๊ฐ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ์ฌ์ผ ํ๋ค.
์ด๋ 'instance=post'๋ฅผ ์ด์ฉํ์ฌ Form์ ์ ๋ฌํ๋ค.
4. template: ์๋ต
Delete(์ญ์ )
1. forms.py: ์๋ต
2. urls.py
path('post/<int:pk>/delete/', views.post_delete, name='post_delete'),
3. views.py
def post_delete(request, pk):
post = get_object_or_404(Post,pk=pk)
post.delete()
return redirect('post_list')
- pk๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ธ๊ฐ์ฒด์ ์ ๊ทผํ๊ณ delete()ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ญ์ ํ๋ค.
- ์ญ์ ์ดํ์๋ ๊ธ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ฃผ๋ url๋ก ์ด๋ํ๋ค.
4. template: ์๋ต
'๐ | WEB DEV > Django' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Django_์ฅ๊ณ ๋ถ์๊ธฐ (7)_login, logout (0) | 2022.06.30 |
---|---|
Django_์ฅ๊ณ ๋ถ์๊ธฐ (5)_ํ์ด์ง ์ด๋, ์์ธ ํ์ด์ง (0) | 2022.06.30 |
Django_์ฅ๊ณ ๋ถ์๊ธฐ (4)_ํ ํ๋ฆฟ ๋ฌธ๋ฒ (0) | 2022.06.30 |
Django_์ฅ๊ณ ๋ถ์๊ธฐ (3)_QuerySet (0) | 2022.06.30 |
Django_์ฅ๊ณ ๋ถ์๊ธฐ (2)_MVT ์์ฑ (0) | 2022.06.30 |
๋๊ธ