standard create - pai-plznw4me/django-initializer GitHub Wiki
ํ์ค Create Page ๊ฐ์ด๋
What?
ํ์ค ์์ฑ
๋Target ๋ชจ๋ธ
record
์ ์ถ๊ฐํ๋๊ฒ์ ์๋ฏธํ๋ค.ํ์ค create page
๋standard_create()
์ ํตํด ์์ฑ๋ ์ฝ๋ ๋ฐ HTML ์ ์๋ฏธํ๋ค.
def standard_create(request, template_name, form_class, redirect_view, redirect_path_variables, callback,
**callback_kwargs):
"""
ํ์ค ์์ฑ ํผ ์ฒ๋ฆฌ ๋ทฐ ํจ์์
๋๋ค. ํผ ์ฒ๋ฆฌ ํ ๋ฆฌ๋๋ ์
์ ์ํํฉ๋๋ค.
:param request: HttpRequest ๊ฐ์ฒด
:param template_name: ๋ ๋๋ง์ ์ฌ์ฉํ ํ
ํ๋ฆฟ ์ด๋ฆ
:param form_class: ์ฌ์ฉํ ํผ ํด๋์ค
:param redirect_view: ํผ ์ฒ๋ฆฌ ์๋ฃ ํ ์ด๋ํ ๋ทฐ ์ด๋ฆ
:param redirect_path_variables: ๋ฆฌ๋๋ ์
์ ์ ๋ฌํ ์ถ๊ฐ์ ์ธ ๊ฒฝ๋ก ๋ณ์๋ค (๋์
๋๋ฆฌ ํํ)
:param callback: ์ ํ์ ์ธ ์ฝ๋ฐฑ ํจ์ (ํจ์ ํน์ ๋ฉ์๋)
:param callback_kwargs: ์ฝ๋ฐฑ ํจ์์ ์ ๋ฌํ ์ถ๊ฐ ํค์๋ ์ธ์๋ค
:return: HttpResponse ๊ฐ์ฒด
"""
if request.method == 'POST':
# POST ์์ฒญ ์ฒ๋ฆฌ
form = form_class(request.POST, request.FILES) # POST ๋ฐ์ดํฐ ๋ฐ ํ์ผ ์ฒ๋ฆฌ
# ์ ํจ์ฑ ๊ฒ์ฌ ํต๊ณผ ์
if form.is_valid():
valid_inst = form.save(commit=False)
# ์ฝ๋ฐฑ ํจ์ ํธ์ถ
if callback:
callback(request=request,
template_name=template_name,
form_class=form_class,
redirect_view=redirect_view,
redirect_path_variables=redirect_path_variables,
valid_inst=valid_inst,
**callback_kwargs)
# ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ
valid_inst.save()
# ๋ฆฌ๋๋ ์
if redirect_path_variables: # redirect_path_variables ์ด None ์ด ์๋๋ฉด
return redirect(redirect_view, **redirect_path_variables)
else:
return redirect(redirect_view)
# ์ ํจ์ฑ ๊ฒ์ฌ ์คํจ์
else:
content = render(request, template_name=template_name, context={'form': form}).content.decode('utf-8')
ret_html = add_content(request, 'doctris', content)
return HttpResponse(ret_html)
elif request.method == 'GET': # GET ์์ฒญ ์ฒ๋ฆฌ
form = form_class() # <-- FILES ์ ๊ฐ์ด ์
๋ ฅ์ด ๋์ด์ผ ํ๋ค.
# ํผ์ ๋ ๋๋งํ๊ณ ์ถ๊ฐ ์ฝํ
์ธ ์์ฑ
added_contents = []
content = render(request, template_name=template_name, context={'form': form}).content.decode('utf-8')
added_contents.append(content)
# ์ฝ๋ฐฑ ํจ์ ํธ์ถ
if callback:
callback(request=request,
template_name=template_name,
form_class=form_class,
redirect_view=redirect_view,
redirect_path_variables=redirect_path_variables,
added_contents=added_contents,
**callback_kwargs)
# ์ต์ข
๋ ๋๋ง
ret_html = add_content(request, 'doctris', *added_contents)
return HttpResponse(ret_html)

์์ฑ
-
CreateForm
์ ํ์ฉํดRecord
์ถ๊ฐ์ ํ์ํ ํ๋ ํญ๋ชฉ์ ๊ฐ์ ธ์จ๋ค. -
์ถ๊ฐ๊ฐ ๋ชจ๋ ๋๋๋ฉด
redirect
๋ฅผ ํตํด ์ ํธ๋ฅผ ์ก์ ํ๋ค. -
callback ํจ์๋ GET, POST ๋ชจ๋ ์คํ๋๋ค.
if method == 'GET' or method == 'POST' ์ ํตํด์ ์์ฑ
How to use ?
# 2๋ฒ์งธ ์์
def create(request):
"""
ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ๋ทฐ ํจ์์
๋๋ค.
:param request: HttpRequest ๊ฐ์ฒด
:return: HttpResponse ๊ฐ์ฒด
"""
def _callback(**kwargs):
if kwargs['request'].method == 'GET':
title = h_tag(2, 'ํ๋ก์ ํธ ์์ฑ')
kwargs['added_contents'][0] = title + card_row((kwargs['added_contents'][0], 12))
return standard_create(request, 'standard/create.html', ProjectFileCreateForm, 'project:detail', {}, _callback)
# 2๋ฒ์งธ ์์
def projectfile_create(request):
"""
ํ๋ก์ ํธ ์ฐ์ถ๋ฌผ์ ์์ฑํ๋ ๋ทฐ ํจ์์
๋๋ค.
:param request: HttpRequest ๊ฐ์ฒด
:return: HttpResponse ๊ฐ์ฒด
"""
def _callback(**kwargs):
if kwargs['request'].method == 'POST':
valid_inst = kwargs['valid_inst']
redirect_path_variables = kwargs['redirect_path_variables']
# ์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํด ํ์ํ ์ฝ๋=> redirect(project:detail, id=valid_inst.project_id)
redirect_path_variables['id'] = valid_inst.project_id
if kwargs['request'].method == 'GET':
title = h_tag(2, 'ํ๋ก์ ํธ ์ฐ์ถ๋ฌผ ์์ฑ')
kwargs['added_contents'][0] = title + card_row((kwargs['added_contents'][0], 12))
return standard_create(request, 'standard/create.html', ProjectFileCreateForm, 'project:detail', {},
_callback)
standard_index
ํจ์๋ฅผ ํตํด ๊ตฌํํฉ๋๋ค.- ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๊ณ ์ ํ๋ ๋ชจ๋ธ์ ์ ํํฉ๋๋ค.
- ๋ชฉ๋ก ํํฐ๋ฅผ ์ค์ ํฉ๋๋ค.
- Form field ์ ํตํด ์ด๋ค ํ๋๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค์ง ๊ฒฐ์ ํฉ๋๋ค
- url path ์ ์ ๊ณตํฉ๋๋ค.
- design (base) ํํ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
- callback function ์ ์ ๊ณตํ์ฌ ์ฌ์ฉ์๊ฐ ์ง์ ๊ฐ์ฒด๋ฅผ ์ปจํธ๋กค ํ ์ ์๋๋ก ํฉ๋๋ค.
Callback function
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด callback function ์ ํตํด์ ์ฐ๋ฆฌ๋ ๋ค์ํ ์์ ๋ค์ ์ํ ํ ์ ์์ต๋๋ค. ํด๋น function ์์์ callback function ์ ๋ฑํ ์ ํด์ง ๋ชฉ์ ์ ์์ง๋ง ๋ํ์ ์ผ๋ก 2๊ฐ์ง ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์ํํฉ๋๋ค.
-
POST ์ผ ๋, ์์ฑ๋ instance ์ ํ์ฉํด ์์ ์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
-
POST ์ผ ๋, redirect ์ ํ์ํ ํค์๋์ธ์๋ฅผ ์ถ๊ฐํ ๋ ์ฌ์ฉํฉ๋๋ค.
-
GET ์ผ ๋, content design ์ ์ ํ๊ฑฐ๋ html ์ ์ถ๊ฐํ๋ ์์ ๋ค์ ์ํํฉ๋๋ค.
-
์ ๋ชฉ ์ ์ถ๊ฐํ๋ ์์ ๋ค์ ์ํํฉ๋๋ค.
title = h_tag(2, 'ํ๋ก์ ํธ ๋ชฉ๋ก')
-
์ ์์ ์์๋
curd_table_html
์div class=card
์ curd_table_html ์ ์ฝ์ ํ๋ ์์ ๋ค์ ์ํํฉ๋๋ค.added_contents = kwargs['added_contents'] added_contents[0] = title + card_row((added_contents[0], 12)
-
โ ๏ธ ์ถ๊ฐ์ ์ผ๋ก added_contents
์ ์ถ๊ฐ๋ ์๋ฃ๋ ์์๋๋ก ํ๋ฉด์ ๋๋๋ง ๋ฉ๋๋ค.