양식(1)
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, 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_테이블은 필드의 '유효성' 을 전방에서 검증할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.