양식(1)

7938 단어
단순히 전방의 html에서 볼 때 폼은 서버에 데이터를 제출하는 데 사용되며 백엔드의 서버가 Django든 PHP 언어든 다른 언어를 사용하든 상관없다.input 탭을form 탭에 놓고 제출 단추(submit)를 추가하면 제출 단추를 누르면 input 탭에 대응하는 값을 서버에 제출할 수 있습니다.
Django의 폼: Django의 폼은 전통적인 HTML 언어의 폼을 풍부하게 한다.Django의 양식에서는 주로 다음 두 가지 작업을 수행합니다.
<1> 양식 템플릿을 렌더링합니다.<2> 양식에서 데이터가 올바른지 확인
게시판 페이지 생성의 예:
단계<1>새'front app', 새'forms'
# forms

#     ,     '  '  
from django import forms

class MessageBoardForm(forms.Form): #   Form 
    title=forms.CharField(max_length=10,min_length=2)
    content=forms.CharField(widget=forms.Textarea)#   widget(  )  'Textarea'  
    email=forms.EmailField()
    reply=forms.BooleanField(required=False)# reply    'required'    ,  '  ','   '

단계 <2> 서버 로드
# front.views

from django.shortcuts import render
from django.views.generic import View
from .forms import MessageBoardForm

# FormView    'get' 'post'  
class FormView(View):

    def get(self,request):
        #         context
        #   form            ,    
        form=MessageBoardForm()
        context={
            'form':form
        }
        return render(request,'index.html',context=context)
        

단계 <3> 전단 템플릿의 렌더링 및 매핑 URL
# index.html




    
    Message Board


    
{{ form.as_table }} # form as_table
# ' ' ,
''' , form.as_table, CSS , ... ''' # urls from django.urls import path from front import views urlpatterns = [ path('', views.FormView.as_view()), ]

서비스를 시작하고 웹 페이지를 새로 고침하고 효과를 보십시오. (모든 '필드' 는 '자동' 추가 ':' 기호를 사용합니다.) 테스트를 통해 백엔드의'post'방법이 정의되지 않았음에도 불구하고, 백엔드는 '필드' 에 대해 제한을 했습니다. 예를 들어 '콘텐츠' 필드는 비울 수 없고, '이메일' 필드의 형식 '함부로 쓰기' 도 통과할 수 없습니다.
• 작은 수정'forms.py', 템플릿 탭 변경 ('label' 을 통해 중국어 탭 설정)
# forms

from django import forms

class MessageBoardForm(forms.Form):
    #   label        
    title=forms.CharField(max_length=10,min_length=2,label='  ')
    content=forms.CharField(widget=forms.Textarea,label='  ')
    email=forms.EmailField(label='  ')
    reply=forms.BooleanField(required=False,label='  ')

단계 <4> 백엔드'post'메서드 작성:
# views

from django.shortcuts import render
from django.views.generic import View
from .forms import MessageBoardForm
from django.http import HttpResponse

class FormView(View):

    def get(self,request):
        ......
        return render(request,'index.html',context=context)

    def post(self,request):
    
        #       form          ,       (is_valid cleaned_data      )
        form=MessageBoardForm(request.POST) #   POST    '     '
        if form.is_valid(): #       
            title=form.cleaned_data.get('title') #   cleaned_data         
            content=form.cleaned_data.get('content')
            email=form.cleaned_data.get('email')
            reply=form.cleaned_data.get('reply')
            #             
            print('*'*40)
            print(title)
            print(content)
            print(email)
            print(reply)
            print('*'*40)
            return HttpResponse('       !!!')
        else:
            print(form.errors) #              ,'        '
            return HttpResponse('fail!')
            '''
            
  • content
    • This field is required.
  • title
    • This field is required.
  • email
    • This field is required.
'''

예외 처리:
errors 속성이 되돌아오는 '정보' 가 우호적이지 않습니다. type (form.errors) # class'django를 보십시오.forms.utils.ErrorDict', errors는 실질적으로'ErrorDict'의 실례입니다. 원본 코드를 보고 get 를 호출합니다.json_데이터 ()가 더 좋은 오류 정보를 반환합니다.
class FormView(View):

    ......
        else:
            # {'content': [{'message': 'This field is required.', 'code': 'required'}], 'title': [{'message': 'This field is required.', 'code': 'required'}], 'email': [{'message': 'This field is required.', 'code': 'required'}]}

            print(form.errors.get_json_data())
            return HttpResponse('fail!')
            '''
                      
            '''

추가 개선: 중국어 사용자 정의 오류 내용 사용하기
# forms

from django import forms

class MessageBoardForm(forms.Form):
    #    error_messages      '    '
    title=forms.CharField(max_length=10,min_length=2,label='  ',
                          error_messages=dict(min_length='      2   '))
    content=forms.CharField(widget=forms.Textarea,label='  ',
                            error_messages=dict(required='    content  '))
    email=forms.EmailField(label='  ',error_messages=dict(required='    email  '))
    reply=forms.BooleanField(required=False,label='  ')
    
    '''
    {'content': [{'message': '    content  ', 'code': 'required'}], 'email': [{'message': '    email  ', 'code': 'required'}], 'title': [{'message': 'This field is required.', 'code': 'required'}]}
    '''

Form.as table을 더 이상 사용하지 않는 프런트엔드 인스턴스를 사용합니다.
# forms

from django import forms

class MessageBoardForm(forms.Form):
   #      key     'required',    'invalid'
    email=forms.EmailField(label='  ',error_messages=dict(required='    email  '))
    price=forms.FloatField(label='  ',error_messages=dict(invalid='          '))
    
# views

from django.shortcuts import render
from django.views.generic import View
from .forms import MessageBoardForm
from django.http import HttpResponse
from django.forms.utils import ErrorDict

class FormView(View):
    
    #     context=form,        
    def get(self,request):
        return render(request,'index.html')

    def post(self,request):
        form=MessageBoardForm(request.POST)
        if form.is_valid():#      ,   is_valid()   ,     
            price=form.cleaned_data.get('price')
            return HttpResponse('      !!!')
        else:
            print(form.errors.get_json_data()) #       get_json_data()  
            return HttpResponse('      !')

# html




    
    Message Board


    

서비스 재부팅, 일부러 실수, 터미널 효과 보기
'''
{'price': [{'message': '          ', 'code': 'invalid'}], 'email': [{'message': '    email  ', 'code': 'required'}]}
'''

주의: 전단이 순수한 html 언어를 사용했기 때문에 전단 인터페이스는 메일박스 필드의'유효성'을 검증하지 않을 것이다. 우리는 이전에form을 사용했다.as_테이블은 필드의 '유효성' 을 전방에서 검증할 수 있습니다.

좋은 웹페이지 즐겨찾기