์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Docker
- KDT_TIL
- CI/CD
- disk spill
- aws
- ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ
- Airflow
- SQL
- Salting
- Spark Caching
- Spark Partitioning
- Spark SQL
- mysql
- etl
- redshift
- off heap memory
- DataFrame Hint
- ๋น ๋ฐ์ดํฐ
- Kubernetes
- k8s
- Spark ์ค์ต
- Dag
- colab
- Speculative Execution
- topic
- spark executor memory
- AQE
- Spark
- backfill
- Kafka
- Today
- Total
JUST DO IT!
[TIL]KDT_20230425 ๋ณธ๋ฌธ
๐ KDT WEEK 4 DAY 2 TIL
- Django
- ๋ทฐ(views)์ ํ ํ๋ฆฟ(templates)
- ํ์ด์ง ๋ง๋ค๊ธฐ
- ์๋ฌ ์ฒ๋ฆฌํ๊ธฐ, ๋ฐฉ์ดํ๊ธฐ
- ํ์ด์ง ์ปค์คํฐ๋ง์ด์ง
๐ฅ ๋ทฐ์ ํ ํ๋ฆฟ
polls/views.py์์ ์ฐ๋ฆฌ๊ฐ html์ ๊ทธ๋ ค์ฃผ๊ธฐ ์ํด render ๊ธฐ๋ฅ์ ํ์ฉํด๋ณด์.
from django.http import HttpResponse
from .models import *
from django.shortcuts import render # index.html์ ๊ทธ๋ ค์ฃผ๋ ์ญํ Django ๊ธฐ๋ฅ
def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
context = {'questions' : latest_question_list}
return render(request, 'polls/index.html', context)
polls/views.py์ ์ผ๋ถ๋ถ์ ๊ฐ์ ธ์๋ณด์๋ค.
๊ฐ ํญ๋ชฉ์ ๋ํด ์ค๋ช ํด๋ณด์๋ฉด..
- latest_question_list์ order_by ๊ธฐ๋ฅ์ผ๋ก ์ ๋ ฌํ์ฌ ๊ฐ์ฅ ์ต๊ทผ ํญ๋ชฉ 5๊ฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
- context๋ ํ ํ๋ฆฟ์ ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์๊ฐ๋ค. ๋ณด๋ด๋๊ฑด render๊ฐ ์ฒ๋ฆฌํด์ค๋ค!
- render๋ Django์ ๋ด์ฅํจ์๋ก, HTTP ์์ฒญ์ ๋ฐ์ ํด๋น ์์ฒญ์ ๋ํด ์ํ๋ ํ
ํ๋ฆฟ ํ์ผ์ ๋ ๋๋งํ์ฌ ์๋ตํ๋ค.
- render(์์ฒญ , ํ ํ๋ฆฟ ํ์ผ์ ๊ฒฝ๋ก , context๋ฐ์ดํฐ) ์ฒ๋ผ ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋๋ค.
์์ render์์ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ 'polls/index.html'๋ก ์ฒ๋ฆฌํ ๊ฒ์,
๋ฏธ๋ฆฌ pollsํด๋์ templates/polls/index.html ์ ๋ง๋ค์ด๋์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์ , context๋ฅผ ์ ๋ฌ๋ฐ์ index.html์์ ํ๋ฉด์ ๊ทธ๋ ค์ฃผ๋ ์ญํ ์ ํด์ค ๊ฒ์ด๋ค.
{% if questions %}
<ul>
{% for question in questions %}
<li>{{question}}</li>
{% endfor %}
</ul>
{% else %}
<p>no question</p>
{% endif %}
- html์์๋ if, for ๋ฌธ์ ์๋ค์ {% ์ %} ํํ๋ก ์ฒ๋ฆฌํด์ค์ผํ๋ค.
- if, for๋ฌธ์ด ๋๋๋ฉด endif, endfor๊ฐ ํ์ํ๋ค!
- context๋ก ๋ฐ์ questions์ ์กด์ฌ์ฌ๋ถ์ ๋ฐ๋ผ ํ๋ฉด์ ์ถ๋ ฅ์ด ๋ฌ๋ผ์ง๋ ์ฝ๋์ด๋ค.
์์ธ (detail) ํ์ด์ง ๋ง๋ค๊ธฐ
๋จผ์ , ํ์ด์ง๋ฅผ ์ถ๊ฐํ ๋๋ polls/urls.py์ ์ด๋ค url๋ก ์ถ๊ฐํ ๊ฒ์ธ์ง ์ ์ํ๋ค.
from django.urls import path
from . import views
app_name = 'questions' # app_name์ ๋ง๋ค์ด์ฃผ๋ฉด, ๋ค๋ฅธ ํ์ url name์ด ๊ฐ์์ ํผ๋๋๋ ๊ฑธ ๋ฐฉ์งํ ์ ์๋ค!
urlpatterns = [
path('', views.index, name='index'),
path('some_url', views.some_url),
path('<int:question_id>/', views.detail, name='detail'), # ์ถ๊ฐํ ๋ถ๋ถ
]
detail ํ์ด์ง๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด urls.py์ ํด๋น ์ฝ๋๋ฅผ ์ฝ์ ํ์๋ค.
์ด์ , < > ์์ int๋ก ๋ฐ์์ค๋ question_id๋ฅผ ๊ฒฝ๋ก๋ก ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์ด๋ค.
๋ค์์ผ๋ก, ์ค์ polls/views.py์ ๋ค์ ๋ฌธ๊ตฌ๋ฅผ ์ฝ์ ํ์ฌ detail ํ์ด์ง๋ฅผ ์ ์ํ๋ค.
def detail(request, question_id):
question = Question.objects.get(pk=question_id)
return render(request, 'polls/detail.html', {'question': question})
์๊น context์ dict ํํ๋ฅผ ์ ์ํ๊ณ ๋๊ฒจ์ค ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ, ์ด๋ฒ์๋ renderํจ์ ์ธ์์ ์ง์ dict๋ฅผ ๋ฃ์ด์คฌ๋ค.
render ํจ์์์ detail.html์ ๊ทธ๋ฆฌ๊ธฐ๋ก ํ์ผ๋, detail.html๋ ํ์ํ ๊ฒ์ด๋ค.
polls/templates ์์ detail.html์ ํ๋ ๋ง๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ๋ง๋ค์ด ์ฃผ์๋ค.
<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
<li>{{ choice.choice_text }}</li>
{% endfor %}
</ul>
render์์ url์ ์ ๋ ฅํ question_id์ ํด๋นํ๋ question์ ๋ฐ์์์ผ๋, ์ด๋ฅผ ์ฌ์ฉํด์ ํ์ํ ๋ถ๋ถ์ ์ถ๋ ฅํด๋ณด์๋ค.
์ ์ฅํ๊ณ ์ฌ์ดํธ์์ ํ์ธํด๋ณด๋ฉด..
์์ธ (detail) ํ์ด์ง ์์ ๋งํฌ ์ถ๊ฐํด๋ณด๊ธฐ
url์ ์ง์ ์ ๋ ฅํ๋ ๊ฒ์ด ์๋๋ผ ์ฌ์ดํธ ์์์ ๋งํฌ๋ฅผ ํ๊ณ ์ด๋ํ๋ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํํด๋ณด์๋ค.
html์ ๊ณต๋ถํ ๋ ์ฌ์ฉํ๋ ๋งํฌ ํ๊ทธ.. a ํ๊ทธ๋ฅผ ๋๊ฐ์ด html์ ๊ตฌํํ๋ฉด ๋๋ค!
index.html โถ detail.html๋ก ์ด๋ํ ๊ฒ์ด๋ฏ๋ก index.html์ aํ๊ทธ๋ฅผ ์ถ๊ฐํ๋ค.
a ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ด๋ํ url์ ์์ฑ์ ์ฃผ์ํ์.
{% if questions %} <!-- questions์ด ์์ ๊ฒฝ์ฐ๋ฅผ ๋๋น -->
<ul>
{% for question in questions %}
<li><a href="{% url 'questions:detail' question.id %}">{{ question.question_text }}</a></li>
{% endfor %}
<ul>
{% else %}
<p>no questions</p>
{% endif %}
question_text๋ฅผ ๋ํ๋๋ ๋ถ๋ถ์ a ํ๊ทธ๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค.
์ด๋ค url๋ก ์ด๋ํ๋์ง ๋ณด๋ฉด, ํํ๊ฐ ์กฐ๊ธ ํน์ดํ๋ค.
ํ ๋ถ๋ถ์ฉ ๋๋์ด ๋ณด๋ฉด..
{% url 'questions:detail' question.id %}
- url : url ์ ์ฌ์ฉํ๊ฒ ๋ค๋ ๋ช ์
- 'questions:detail' : urls.py์ ๋ช ์๋ 'app_name:path_name' ์ ํํ๋ฅผ ๊ฐ์ถ๋ค!
- question.id : ํด๋น path์์ ํ์ํ๋ ๋ฐ์ดํฐ, question.id๋ฅผ ๋ณด๋ด์ผํ๋ฏ๋ก ๋ง์ง๋ง ์ธ์๋ก ๋ฃ์ด์ค๋ค!
404 ์๋ฌ ์ฒ๋ฆฌํ๊ธฐ
๋ค์์ url์ ๋ค์ด๊ฐ๋ question_id๋ฅผ ์๋ชป ์ ๋ ฅํ์ ๋ ๋ํ๋๋ ์ค๋ฅ ํ๋ฉด์ด๋ค.
์๋ฒ์ ์๋ชป(500)์ด ์๋ ์์ฒญ์ ์๋ชป(404)์ด๋ฏ๋ก, 404์๋ฌ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ข์๋ณด์ธ๋ค!
์ฌ๊ธฐ์ ๋ฐ์ผ๋ก ์กฐ๊ธ๋ง ์คํฌ๋กคํด๋ณด๋ฉด, ์ด๋์ ์๋ฌ๊ฐ ๋ฐ์ํ๋์ง ์ ์ ์๋ค.
์๋ฌ๊ฐ ๋ฐ์ํ ๊ตฌ๊ฐ์์ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
from django.http import HttpResponse, Http404
from .models import *
from django.shortcuts import render
def detail(request, question_id):
try :
question = Question.objects.get(pk = question_id)
except Question.DoesNotExist:
raise Http404("Question does not exist")
return render(request, 'detail.html', {'question' : question})
polls/detail.py ์ฝ๋์ ์ผ๋ถ์ด๋ค.
์ด์ฒ๋ผ ๋ํ๋ python์ try ~ except ๊ตฌ๋ฌธ์ผ๋ก ์๋ฌ์ฒ๋ฆฌ๋ฅผ ํด๋ ์ข๋ค.
ํ์ง๋ง Django์์๋ ์ด๋ฌํ ๊ฒฝ์ฐ๊ฐ ๋น๋ฒํ๋ฏ๋ก ๋ฐ๋ก ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
from django.http import HttpResponse
from .models import *
from django.shortcuts import render, get_object_or_404
def detail(request, question_id):
question = get_object_or_404(Question, pk=question_id) # Django์ get Error 404์ฒ๋ฆฌ
return render(request, 'detail.html', {'question' : question})
get_object_or_404( getํ ๋ชจ๋ธ , ์กฐ๊ฑด )
์ด๋ ๊ฒ ํ์ค์ด๋ฉด ์์ฝ๊ฒ 404 ์๋ฌ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค!
๐ฆ ํผ(Forms)
์์ธ ํ์ด์ง ํ๋ฉด์์ ์ด๋ค choice๋ฅผ ์ ํํ๋ฉด, ํด๋น choice์ vote๋ฅผ 1 ์ฌ๋ฆฌ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋ณด๊ฒ ๋ค.
html ๊ฐ์์์ ๋ฐฐ์ ๋ ๋๋ก, form ํ๊ทธ์ input์ ํ์ฉํ์ฌ ํด๋น ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค.
<form action="{% url 'questions:vote' question.id %}" method="post">
{% csrf_token %} <!-- ๊ฐ๋จํ ํ ํฐ ์์ฑ -->
<h1>{{question.question_text}}</h1>
{% for choice in question.choice_set.all %} <!-- Shell๊ณผ ๋ค๋ฅด๊ฒ all()์ ๊ดํธ๋ ํ์ ์์ -->
<input type="radio" name="choice" id="chocie{{ forloop.counter }}", value="{{choice.id}}"> <!-- forloop๋ loop๊ฐ ๋๋๋ง๋ค ์นด์ดํฐ๊ฐ 1์ฉ ์ฆ๊ฐํจ -->
<label for="chocie{{ forloop.counter }}">
{{choice.choice_text}}
</label>
<br>
{% endfor %}
<input type="submit", value="Vote">
</form>
- form ํ๊ทธ๋ฅผ ๋ณด๋ฉด, action์ url์ ๋ฃ์๋ค. ์๊น ๋ฐฐ์ ๋๋๋ก, { app_name : path_name }์ ํํ์ธ๋ฐ, path_name์ด ์๋ก์ด vote๋ก ์ ์ํ๋ค. ์ด vote๋ ๋์ค์ urls.py์ ์ถ๊ฐํ๋ค.
- {% csrf_token %} ์ ์๋์ผ๋ก ํ ํฐ์ ์ถ๊ฐํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค. ์ด๊ฒ ์์ผ๋ฉด ํ ํฐ์ด ์๋ค๊ณ ์ค๋ฅ ๋ฐ์
- choice๋ง๋ค radio input์ด ํ์ํ๋ฏ๋ก for๋ฌธ์์ ๋ฃ์ด์ฃผ์๋ค.
- ๋ชจ๋ radio๊ฐ ๋๊ฐ์ "choice" name์ ๊ฐ์ง๋ฏ๋ก, ๊ทธ ์ค ํ๋๋ง ์ ํํ ์ ์๋ค.
- id๋ forloop์ ์ํด ์๋์ผ๋ก 1์ฉ ์ฆ๊ฐ๋ ํํ๋ฅผ ๊ฐ์ง๋ค.
- value๋ choice.id๋ฅผ ๊ฐ์ง๋๋ฐ, ๋์ค์ ์ด value ๊ฐ์ ์กฐํํ์ฌ ํด๋น choice์ vote๋ฅผ 1 ์ฌ๋ ค์ค ๊ฒ์ด๋ค.
- ๋ง์ง๋ง์ Vote๋ผ๋ ์ด๋ฆ์ ๋ฒํผ์ผ๋ก ์ ์ถํ ์ ์๋ค.
์๊น ๋งํ๋ vote๋ฅผ ๋ฐ๋ก polls/urls.py์ ์ถ๊ฐํด๋ณด์.
detail์ด ๋ฐ๋ ๊ฒ์ฒ๋ผ question_id๋ฅผ ๋๊ฐ์ด ๋ฐ์์ค๊ณ , ๊ทธ ๋ค์ /vote ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ ํํ๋ฅผ ๊ฐ์ง๋ค.
url์ path๋ก ๊ฒฝ๋ก๋ฅผ ๋ง๋ค์์ผ๋ ๋ฐ๋ก views.py์ ์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง ์์ฑํด์ค๋ค.
from django.http import HttpResponseRedirect # ์ฌ์ฉ์๋ฅผ ๋ค๋ฅธํ์ด์ง๋ก ๋ณด๋ด๋ ๊ธฐ๋ฅ
from django.urls import reverse
def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
selected_choice = question.choice_set.get(pk=request.POST['choice'])
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('questions:index'))
- get_object_or_404๋ก Question์์ get ๊ธฐ๋ฅ๊ณผ ํจ๊ป ์๋ฌ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค.
- ๊ฐ์ ธ์จ question ์ค๋ธ์ ํธ์์ requset.POST['choice'] ๋ฅผ ํตํด ์ ํํ๋ choice๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ์ฌ๊ธฐ์ 'choice'๋, ์๊น input radio ํ์ ์์ name์ผ๋ก ์ ์ํ๋ 'choice'๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- HttpResponseRedirect ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด, ์ฌ์ฉ์๋ฅผ ๋ค๋ฅธ ํ์ด์ง๋ก ๋ณด๋ผ ์ ์๋ค.
์ด๋ ๊ฒ๋ง ํ๋ฉด, ์ฌ์ฉ์๊ฐ radio ๋ฒํผ์ ์ ํํ์ ๋๋ ์ ์์๋ํ์ง๋ง ๊ทธ๋ ์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ด๊ฒ๋ ๊ฐ์ด ์ฒ๋ฆฌํด์ผํ๋ค.
์๊น์ views.py์ vote๋ฅผ try ~ except ๊ตฌ๋ฌธ์ผ๋ก ์๋ฌ ์ฒ๋ฆฌํ๋ค.
def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
try:
selected_choice = question.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
return render(request, 'detail.html', {'question':question, 'error_message': '์ ํ์ด ์์ต๋๋ค'})
else:
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('questions:index'))
KeyError : ์๋ฌด๊ฒ๋ ์ ํํ์ง ์์์ ๋ ๋ฐ์ํ๋ ์ค๋ฅ
Choice.DoesNotExist : get์์ ์๋ Choice๋ฅผ ์ฐพ์ผ๋ ค๊ณ ํ ๋ ๋ฐ์ํ๋ ์ค๋ฅ
์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด detail.html๋ก ๋๊ฐ์ด ๋ ๋๋ง๋์ง๋ง, error_message๋ฅผ ํจ๊ป ๊ฐ์ ธ๊ฐ๋ค.
๊ฐ์ ธ๊ฐ error_message๋ฅผ detail.html์์ ์ฒ๋ฆฌํ๋ฉด ๋!
detail.html์ ํด๋น ๊ตฌ๋ฌธ์ ์ถ๊ฐํ์๋ค.
์๋ฌ ๋ฐฉ์ดํ๊ธฐ
ํญ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์์๋ํ๋ค๊ณ ์๊ฐํ์ง ์๊ณ , ์ฌ๋ฌ ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ๋ฐ์ ธ ์๋ฌ๋ฅผ ๋ฐฉ์ดํ๋ ๊ฒ์ด ์ค์ํ๋ค!
- vote๋ฅผ ํ๋ ๋์ค ํด๋น choice๊ฐ DB์์ ์ฌ๋ผ์ง ๊ฒฝ์ฐ โถ Choice.DoesNotExist ์ฒ๋ฆฌ ํ์
- ์๋ก ๋ค๋ฅธ ์๋ฒ์์ ๊ฐ์ DB๋ฅผ ์ฌ์ฉํ ๋, ๋์์ votes๋ฅผ ์ฆ๊ฐ์ํจ ๊ฒฝ์ฐ โถ ์๋ฒ๊ฐ ์๋, DB์์ ์ฒ๋ฆฌํ๋ฉด ๋จ
DB์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค. django ๊ธฐ๋ฅ์ธ F๋ฅผ ์ฌ์ฉํ๋ค.
F๋ฅผ importํด์ฃผ๊ณ , votes์ ์ฐ์ฐ์ ์ ์ฝ๋์ฒ๋ผ ๋ฐ๊ฟ์ค๋ค.
F๋ 'votes'๋ฅผ DB์์ ๋ฐ๋ก ์ฐธ์กฐํ์ฌ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์, ๊ฐ ์๋ฒ์์ ์ฐ์ฐํ์ฌ ์ค๋ฅ๊ฐ ๋๋ ์ํฉ์ ๋ฐฉ์งํ ์ ์๋ค.
๊ฒฐ๊ณผ(result) ์กฐํ ํ์ด์ง ๋ง๋ค๊ธฐ
์์ธ ํ์ด์ง ๋ง๋ค๊ธฐ์ ์ ์ฌํ๋ฏ๋ก ๋น์ทํ ๊ณผ์ ์ ํจ์คํ๋ค.
๊ฐ ์ถ๊ฐํ ๋ด์ฉ
polls/views.py
def result(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/result.html', {'question': question})
polls/templates/polls/result.html
<h1>{{ question.question_text }}</h1><br>
{% for choice in question.choice_set.all %}
<label>
{{ choice.choice_text }} -- {{ choice.votes }}
</label>
<br>
{% endfor %}
polls/urls.py
from django.urls import path
from . import views
app_name = 'polls'
urlpatterns = [
path('', views.index, name='index'),
path('<int:question_id>/', views.detail, name='detail'),
path('<int:question_id>/vote/', views.vote, name='vote'),
path('<int:question_id>/result/', views.result, name='result'),
]
ํฌํ ์ดํ result ํ์ด์ง๋ก ์ด๋์ํค๊ธฐ ์ํด polls/views.py์์ vote์ return์ ์์ ํ๋ค.
questions:result๋ฅผ ํตํด resultํ๋ฉด์ผ๋ก ๋์ด๊ฐ์ผ๋ฉฐ, args๋ก ์ฌ๋ฌ๊ฐ์ ๋ณ์๋ฅผ ๋ฐ์ ์ ์๋ค.
๊ผญ ํ์ํ ์ธ์ question_id๋ฅผ ๋ฃ์ด๋๋ค.
๐ค ๊ณต๋ถํ๋ฉด์ ์ด๋ ค์ ๋ ๋ด์ฉ
์น ์ฌ์ดํธ๋ฅผ ๋ค๋ฃจ๋ฉด์ ๊ฒฝ๋ก๋ฅผ ์ด๋ฆฌ์ ๋ฆฌ ๋ง์ถฐ ์ค์ ํด์ฃผ๋ ์ ์ด ์กฐ๊ธ ์ด๋ ค์ ๋ค.
์๋ฌด๋๋ ์ด๋ฌํ ๋ถ๋ถ์ ํ์คํ ์ดํด๊ฐ ํ์ํ ๊ฒ ๊ฐ๋ค.. ๋ค์์ ๊ผญ ๋ณต์ตํด๋ด์ผ์ง..
Django์ ์๋ก ๋ฐฐ์ด ๊ธฐ๋ฅ๋ ์ฌ๋ฌ ๊ฐ์ง์์๊ณ , ํ์ด์ฌ๋ง ํด๋ *args, **kwargs๋ ์ฒ์ ์จ๋ณด๋ ๊ธฐ๋ฅ์ด์๋ค.
์ฌ๋ฌ๋ฒ ๋ค์ํด๋ณด์ง์์ผ๋ฉด ๊น๋จน์ ๊ฒ ๊ฐ์ผ๋.. ๋๋ฏธ ํ๋ก์ ํธ๋ฅผ ํ๋ ๋ง๋ค์ด๋ด์ผ๊ฒ ๋ค.
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL]KDT_20230427 (0) | 2023.04.27 |
---|---|
[TIL]KDT_20230426 (0) | 2023.04.26 |
[TIL]KDT_20230424 (0) | 2023.04.24 |
[TIL]KDT_20230421 (0) | 2023.04.21 |
[TIL]KDT_20230420 (0) | 2023.04.20 |