๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Web/๐ŸŒ› Django

Django ํŠœํ† ๋ฆฌ์–ผ (4)

์ฒซ ๋ฒˆ์งธ ์žฅ๊ณ  ์•ฑ ์ž‘์„ฑํ•˜๊ธฐ Part 3

 

์ด ํŠœํ† ๋ฆฌ์–ผ์„ ํŠœํ† ๋ฆฌ์–ผ Part 2์—์„œ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

 


๋ทฐ

 

๋ทฐ๋Š” Django ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ผ๋ฐ˜์ ์œผ๋กœ ํŠน์ • ๊ธฐ๋Šฅ๊ณผ ํƒฌํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•˜๋Š” ์›น ํŽ˜์ด์ง€์˜ ํ•œ ์ข…๋ฅ˜์ž…๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“œ๋Š” poll์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„ค๊ฐœ์˜ view๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

  • ์งˆ๋ฌธ "์ƒ‰์ธ" ํŽ˜์ด์ง€ -- ์ตœ๊ทผ์˜ ์งˆ๋ฌธ๋“ค์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์งˆ๋ฌธ "์„ธ๋ถ€" ํŽ˜์ด์ง€ -- ์งˆ๋ฌธ ๋‚ด์šฉ๊ณผ, ํˆฌํ‘œํ•  ์ˆ˜ ์žˆ๋Š” ์„œ์‹์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์งˆ๋ฌธ "๊ฒฐ๊ณผ" ํŽ˜์ด์ง€ -- ํŠน์ • ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค
  • ํˆฌํ‘œ ๊ธฐ๋Šฅ -- ํŠน์ • ์งˆ๋ฌธ์— ๋Œ€ํ•ด ํŠน์ • ์„ ํƒ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํˆฌํ‘œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ทฐ ์ถ”๊ฐ€ํ•˜๊ธฐ

 

์ด์ œ polls/views.py์— ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ด…์‹œ๋‹ค. 

 

polls/views.py
---------------------------------------------------------------------------
def detail(request, question_id):
    return HttpResponse("You're looking at question %s." % question_id)

def results(request, question_id):
    response = "You're looking at the results of question %s."
    return HttpResponse(response % question_id)

def vote(request, question_id):
    return HttpResponse("You're voting on question %s." % question_id)

 

"You're voting on question %s." % question_id ๋Š” python์˜ ๋ฌธ์ž์—ด ํฌ๋งทํŒ… ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

 

python ๋ฌธ์ž์—ด ํฌ๋งทํŒ… ๋ฐฉ์‹์€ ์ด๊ณณ ์—์„œ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

HttpResponse ํ•จ์ˆ˜๋Š” django.http๋ชจ๋“ˆ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค. 

 

HttpResponse ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด

 

Google ๊ฒ€์ƒ‰์—”์ง„์„ ํ†ตํ•ด [Django HttpResponse function] ๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•ด ๋ด…์‹œ๋‹ค.

 

 

์ด์ œ ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์œผ๋‹ˆ path(๊ฒฝ๋กœ)๋ฅผ ์„ค์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

path(๊ฒฝ๋กœ)๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด polls/urls.py์— ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

polls/urls.py
---------------------------------------------------------------------------------
from django.urls import path

from . import views

urlpatterns = [
    # ex: /polls/
    path('', views.index, name='index'),
    # ex: /polls/5/
    path('<int:question_id>/', views.detail, name='detail'),
    # ex: /polls/5/results/
    path('<int:question_id>/results/', views.results, name='results'),
    # ex: /polls/5/vote/
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

 

์ž์‹ ์˜ ๋ธŒ๋ผ์šฐ์ € URL์— "http://127.0.0.1:8000/polls/2/"๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํŽ˜์ด์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์•ž์„œ polls/views.py์— ์ถ”๊ฐ€ํ•œ detail, results, vote ํ•จ์ˆ˜๋“ค์€ views๊ฐ์ฒด์˜ ํ•จ์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ๋ฐฉ๋ฒ•์€ view.๋ฉ”์†Œ๋“œ๋ช… ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ์ž๊ฐ€ ์›น ์‚ฌ์ดํŠธ์˜ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•  ๋•Œ Django๋Š” mysite.urls ํŒŒ์ด์ฌ ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ "/polls/20/"์„ ์š”์ฒญํ–ˆ๋‹ค๋ฉด

mysite.urls์—์„œ urlpatterns๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ฐพ๊ณ , ์ˆœ์„œ๋Œ€๋กœ ํŒจํ„ด์„ ๋”ฐ๋ผ ๊ฐ‘๋‹ˆ๋‹ค.

 

'polls/'๋ฅผ ์ฐพ์€ ํ›„์—” ์ผ์น˜ํ•˜๋Š” ํ…์ŠคํŠธ ("polls/")๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ๋‚จ์€ ํ…์ŠคํŠธ ("20/") ๋ฅผ polls.urls์˜ URLconf๋กœ

์ „๋‹ฌํ•˜์—ฌ ๋‚จ์€ ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

'<int:question_id>/'์™€ ์ผ์น˜ํ•˜์—ฌ, ๊ฒฐ๊ณผ์ ์œผ๋กœ detail() ๋ทฐ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

 


๋ทฐ์— ์ƒˆ๋กœ์šด ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•˜๋„๋ก ๋งŒ๋“ค๊ธฐ

 

์ด์ œ ๋ทฐ์—๋Š” Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ฌด์—‡์ด๋“  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

PDF๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, XML๋ฅผ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜, ์‹ค์‹œ๊ฐ„์œผ๋กœ ZIPํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์ด์ œ index() ๋ทฐ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ตœ์†Œํ•œ 5๊ฐœ์˜ ํˆฌํ‘œ์งˆ๋ฌธ์„ ๋ณด์ด๋„๋ก ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

polls/views.py
--------------------------------------------------------
from .models import Question

def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    output = ', '.join([q.question_text for q in latest_question_list])
    return HttpResponse(output)

 

polls/views.py์— detail, results, vote ํ•จ์ˆ˜๋Š” ๋‚˜๋‘๊ณ 

models ๋ชจ๋“ˆ์„ importํ•ด์ฃผ๊ณ  index()ํ•จ์ˆ˜๋Š” ์ˆ˜์ •ํ•ด์ค๋‹ˆ๋‹ค.

 

 


ํ…œํ”Œ๋ฆฟ ์‹œ์Šคํ…œ

 

Python์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ๋””์ž์ธ์„ ๋ถ„๋ฆฌํ•˜๋„๋ก Django์˜ ํ…œํ”Œ๋ฆฟ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•ด ๋ด…์‹œ๋‹ค.

 

polls๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

 

polls/templates/polls/index.html
------------------------------------------------------------------------
{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

 

์—ฌ๊ธฐ์„œ ํ…œํ”Œ๋ฆฟ ์–ธ์–ด๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

ํ…œํ”Œ๋ฆฟ ์–ธ์–ด์— ๋Œ€ํ•ด์„œ๋Š” ์ด๊ณณ ์—์„œ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์ด์ œ ํƒฌํ”Œ๋ฆฟ์„ ์ด์šฉํ•˜์—ฌ polls/views.py ์— index ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

polls/views.py
---------------------------------------------------------
from django.http import HttpResponse
from django.template import loader

from .models import Question


def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    template = loader.get_template('polls/index.html')
    context = {
        'latest_question_list': latest_question_list,
    }
    return HttpResponse(template.render(context, request))

 

context ๋Š” ํ…œํ”Œ๋ฆฟ์—์„œ ์“ฐ์ด๋Š” ๋ณ€์ˆ˜๋ช…๊ณผ python ๊ฐ์ฒด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์‚ฌ์ „ํ˜• ๊ฐ’์ž…๋‹ˆ๋‹ค.

 

 


render() ํ•จ์ˆ˜

HttpResponse ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ๋ฌธ์€ ์ž์ฃผ ์“ฐ๋Š” ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค. 

 

Django๋Š” ์ด ํ‘œํ˜„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” render()ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

index() ํ•จ์ˆ˜๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)

 

๋ชจ๋“  ๋ทฐ์— ์ ์šฉํ•œ๋‹ค๋ฉด, ๋” ์ด์ƒ loader ์™€ HttpResponse๋ฅผ ์ž„ํฌํŠธํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

 

render()ํ•จ์ˆ˜๋Š” request ๊ฐ์ฒด๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ๋ฐ›๊ณ , ํ…œํ”Œ๋ฆฟ ์ด๋ฆ„์„ ๋‘๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ๋ฐ›์œผ๋ฉฐ 

 

context ์‚ฌ์ „ํ˜• ๊ฐ์ฒด๋ฅผ ์„ ํƒ์  ์ธ์ˆ˜๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. 

 

์ธ์ˆ˜๋กœ ์ง€์ •๋œ context๋กœ ํ‘œํ˜„๋œ ํ…œํ”Œ๋ฆฟ์˜ HttpResponse ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

 


 

'Web > ๐ŸŒ› Django' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Django ํ…œํ”Œ๋ฆฟ ์–ธ์–ด  (0) 2020.06.10
Django ํŠœํ† ๋ฆฌ์–ผ (3)  (0) 2020.06.09
Django ํŠœํ† ๋ฆฌ์–ผ (2)  (0) 2020.06.09
Django ํŠœํ† ๋ฆฌ์–ผ (1)  (0) 2020.06.09