INTERNAL_IPS는 로컬에서만 Debug Toolbar를 사용할 것이기 때문에 로컬 주소를 적어준다.
MIDDLEWARE도 마찬가지로 dev.py에서 추가로 관리할 수 있다.
3. URL 설정
my_project/urls.py
if settings.DEBUG:
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# Serve static and media files from development server
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
import debug_toolbar
urlpatterns = urlpatterns + [
path('__debug__/', include(debug_toolbar.urls)),
]
Debug 세팅을 위해 위와 같이 수정해준다. 역시나 마찬가지로 추가적인 설정이 있으면 '+'를 통해 종류별로 구별해서 정리할 수 있다.
'__debug__'는 debug toolbar의 주소이다. (다른 App이랑 충돌이 안나는 선에서 아무거나 입력해도 된다. debug_toobar.urls만 명시해주면 된다. )
4. 적용 확인
python manage.py runserver
서버를 실행하고 웹 페이지에 들어가보면 적용이 되어 있는 것을 확인할 수 있다. Debug Toolbar를 통해 개발하는데 구체적인 정보를 얻을 수 있다.
AbstractFormField는 wagtail에서 제공하는 Form Builder이다. 사용자가 Form을 전송하고 나서 보여지는 메세지을 thank_you_text 필드에 저장한다. from_address하고 to_address는 사용자가 form을 작성하고 submit을 눌렀을 때, to_address에 있는 메일 주소로 메일을 보내게 할 수 있다. 나는 현재 만드는 Form에서는 쓰지 않지만 사용할 일이 있을 수도 있으니 일단 적어놨다.
from django import forms
from django.db import models
from modelcluster.fields import ParentalKey
from wagtail.contrib.forms.forms import FormBuilder
from wagtail.contrib.forms.models import (
AbstractEmailForm, AbstractFormField, FORM_FIELD_CHOICES)
class FormField(AbstractFormField):
# extend the built in field type choices
# our field type key will be 'ipaddress'
CHOICES = FORM_FIELD_CHOICES + (('ipaddress', 'IP Address'),)
page = ParentalKey('FormPage', related_name='form_fields')
# override the field_type field with extended choices
field_type = models.CharField(
verbose_name='field type',
max_length=16,
# use the choices tuple defined above
choices=CHOICES
)
class CustomFormBuilder(FormBuilder):
# create a function that returns an instanced Django form field
# function name must match create_<field_type_key>_field
def create_ipaddress_field(self, field, options):
# return `forms.GenericIPAddressField(**options)` not `forms.SlugField`
# returns created a form field with the options passed in
return forms.GenericIPAddressField(**options)
class FormPage(AbstractEmailForm):
# intro, thank_you_text, edit_handlers, etc...
# use custom form builder defined above
form_builder = CustomFormBuilder
FormField정의하고 Form type 리스트에 추가하고 CustomFormBuilder에 추가해주면 된다.
field type에 리스트로 저장될 새로운 field이름은 튜플형태로 작성해주면 된다.
('ipaddress', 'IP Address') 에서 앞쪽이 리스트에 표시될 이름이다.
2. render page 수정
기본적으로 form을 제출하고 나면 form_page_landing.html로 redirect된다. 특정 page로 가고 싶을때는 다음과 같이 작성하면된다.
forms/models.py
def render_landing_page(self, request, form_submission=None, *args, **kwargs):
if self.thank_you_page:
url = self.thank_you_page.url
# if a form_submission instance is available, append the id to URL
# when previewing landing page, there will not be a form_submission instance
if form_submission:
url += '?id=%s' % form_submission.id
return redirect(url, permanent=False)
# if no thank_you_page is set, render default landing page
return super().render_landing_page(request, form_submission, *args, **kwargs)
FormPage에 추가해주면 된다. 특정 url로 가고 싶다면 다음과 같이 작성하면 된다.