Django에서 양식 만들기

안녕 얘들아 오늘 django에서 양식을 만드는 방법을 보여줄거야

1단계: django 프로젝트 설정





다음 명령을 사용하여 django 프로젝트를 만듭니다.
django-admin startproject DjangoForms

2단계: 프로젝트에서 앱 만들기


  • cd를 프로젝트 디렉토리에 넣고 다음 명령을 입력합니다
  • .
    python manage.py startapp demo

    3단계: 양식 만들기 😄


    정상적인 형태 만들기



    먼저 일반 양식을 만드는 방법을 보여드리겠습니다(즉, 이 양식은 어떤 모델에도 연결되어 있지 않습니다).
  • 앱 폴더
  • forms.py라는 파일을 만듭니다.
  • 다음 코드
  • 를 사용하여 django에서 froms를 가져올 것입니다.
  • from django import forms
  • django의 모든 양식은 다음 클래스를 상속합니다. forms.Form
  • 예를 들어 다음과 같이 ContactForm이라는 양식을 만듭니다.class ContactForm(forms.Form)
  • 이제 양식에 일부 필드를 추가할 수 있습니다.

  • from django import forms
    from django.core.validators import MaxLengthValidator
    
    class ContactForm(forms.Form):
        name = forms.CharField()
        email = forms.EmailField()
        mobile = forms.CharField(
            validators=[MaxLengthValidator(10)]
        )
    

    we can use form.TypeField for the fields Type can be anything like Char, Email, Integer,Float etc ...

    and also note that we are adding MaxLengthValidator to the validators of mobile field this ensures that when the form is submitted the length of value of mobile field is less than 10



  • 이제 양식을 렌더링할 보기를 views.py에 만들 수 있습니다.

  • # views.py
    from .forms import ContactForm
    
    def contact_form(request):
        form = ContactForm() # <-- Initializing the form
    
        # sending the form to our template through context
        return render(request, "form.html", {"contactform": form})
    

    보기를 urls.py에 매핑

    # urls.py of the project
    from django.contrib import admin
    from django.urls import path
    from demo.views import contact_form
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', contact_form),
    ]
    
    


  • form.html에서 양식 렌더링

  • 템플릿에서 양식을 렌더링하는 두 가지 방법이 있습니다.
  • form.as_p를 사용한 렌더링

  •    <form method="POST" action="">
           {{form.as_p}}
           <button>submit</button>
       </form>
    

    python manage.py runserver를 사용하여 개발 서버를 실행합니다.
    http://localhost:8000로 이동하면 아래와 같이 양식이 표시됩니다.



    양식에 의해 제출된 데이터 처리

    from django.shortcuts import render
    
    # Create your views here.
    from .forms import ContactForm
    
    def contact_form(request):
        form = ContactForm() # <-- Initializing the form
    
        if request.method == 'POST':
            form = ContactForm(request.POST) # <-- populating the form with POST DATA
    
            if form.is_valid():  # <-- if the form is valid
                print("[**] data received [**]")  # <-- we handle the data 
                print(form.cleaned_data['name'])
                print(form.cleaned_data['email'])
                print(form.cleaned_data['mobile'])
    
    
        # sending the form to our template through context
        return render(request, "form.html", {"contactform": form})
    


    양식이 성공적으로 제출되면 터미널에 기록된 데이터가 표시됩니다.

    # output in the terminal
    March 26, 2022 - 20:06:02
    Django version 3.0.7, using settings 'DjangoForms.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CONTROL-C.
    [**] data received [**]
    blog
    [email protected]
    9999999999
    


    그러나 양식에 입력한 데이터가 올바르지 않으면 오류 메시지가 표시됩니다.



    휴대폰 번호가 10자 이상이므로 오류 메시지가 다음 형식으로 표시되는 것을 볼 수 있습니다.

    양식을 렌더링하는 다른 방법



    각 필드를 수동으로 렌더링

    <form method="POST" action="">{% csrf_token %} 
        <div>
            {{ form.name }}
    
            <!---Rendering the error message--->
            {% for error in form.name.error %}
                {{error}}
            {% endfor %}
        </div>
        <div>
            {{ form.email }}
    
             <!---Rendering the error message--->
            {% for error in form.email.error %}
                {{error}}
            {% endfor %}
        </div>
        <div>
            {{ form.phone }}
    
             <!---Rendering the error message--->
            {% for error in form.phone.error %}
                {{error}}
            {% endfor %}
        </div>
        <button>submit</button>
    </form>
    

    좋은 웹페이지 즐겨찾기