Skip to content

Latest commit

ย 

History

History
99 lines (83 loc) ยท 2.44 KB

File metadata and controls

99 lines (83 loc) ยท 2.44 KB

6์ฃผ์ฐจ - 2. form ์‹ค์Šต

1. ์‚ฌ์šฉํ•  ์•ฑ ๋‚ด๋ถ€์— forms.py ์ƒ์„ฑ

2. ํ•„์š”ํ•œ ๋ชจ๋“ˆ ๋ฐ ๊ฐ์ฒด ์ถ”๊ฐ€

from django import forms
from .model import Blog

3. ์ž…๋ ฅ๊ณต๊ฐ„ ํด๋ž˜์Šค ์ •์˜

์–ด๋–ค model์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•  ๊ฒƒ์ธ์ง€
์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๊ฒƒ ์ธ์ง€ Metaํด๋ž˜์Šค์— ์ •์˜

class BlogPost(forms.ModelForm):
    class Meta:
        model = Blog
        fields = [
            'title',
            'body',
        ]

4. urls.py์— ์ฒ˜๋ฆฌํ•จ์ˆ˜ url ์ƒ์„ฑ

urlpatterns = [
    path('<int:blog_id>/', views.detail, name="detail"),
    path('new/', views.new, name="new"),
    path('create/', views.create, name="create"),
    path('search/', views.search, name="search"),
    path('newblog/', views.blogpost, name="newblog"),
]

5. views.py์— ์ฒ˜๋ฆฌํ•จ์ˆ˜ ์ž‘์„ฑ

forms.py์— ์ž‘์„ฑํ•œ ํด๋ž˜์Šค ์ถ”๊ฐ€

from .forms import BlogPost

์ฒ˜๋ฆฌํ•จ์ˆ˜ ์ž‘์„ฑ

def blogpost(request):
    # ์ž…๋ ฅ๋œ ๋‚ด์šฉ์„ ์ฒ˜๋ฆฌ -> POST
    if request.method == 'POST':
        form = BlogPost(request.POST)

        if form.is_valid():
            post = form.save(commit=False)
            post.pub_date = timezone.now()

            form.save()

            return redirect('home')

    # ๋นˆ ํŽ˜์ด์ง€ ์ถœ๋ ฅ -> GET
    else:
        form = BlogPost()

        return render(request, 'new.html', {
            'form': form,
        })

request๋ฐฉ์‹์ด POST์ผ ๊ฒฝ์šฐ form์— ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ
์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— POST๋ฐฉ์‹์œผ๋กœ ์ž…๋ ฅ๋œ ๋‚ด์šฉ์„ ๋ณ€์ˆ˜์— ๋‹ด๊ณ 
is_validํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋‚ด์šฉ์ด ์ž˜ ์ž…๋ ฅ๋˜์–ด์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ ํ›„
์ž…๋ ฅ๋˜์ง€ ์•Š์€ ๋‚˜๋จธ์ง€ ๊ฐ’๋“ค์„ ์ž„์˜๋กœ ์ž…๋ ฅํ•ด ์ค€ ํ›„ ์ €์žฅ
request๋ฐฉ์‹์ด GET์ผ ๊ฒฝ์šฐ ๋นˆ ํŽ˜์ด์ง€ ์ถœ๋ ฅ

6. html์— ์ž‘์„ฑํ•œ forms ์‚ฌ์šฉ

as_table ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
tableํ˜•์‹์œผ๋กœ ๊ฐ์‹ธ์„œ form ์‚ฌ์šฉ

<form method="POST">
{% csrf_token %}
<table>
    {{ form.as_table }}
</table>
<br>
    <input type="submit" value="์ œ์ถœํ•˜๊ธฐ" class="btn btn-dark">
</form>

์ถ”๊ฐ€ - ์ž„์˜์˜ ์ž…๋ ฅ๊ณต๊ฐ„ ์ƒ์„ฑํ•˜๊ธฐ

class BlogPost(forms.Form):
    email = forms.EmailField()
    files = forms.FileField()
    url = forms.URLField()
    words = forms.CharField(max_length=200)
    max_number = forms.ChoiceField(choices=[
        ('1','one'),
        ('2','two'),
        ('3', 'three'),
    ])