티스토리 뷰
참고한 곳
Django Forms and field vaildation
대부분 views.py에서 form.is_valid()를 사용할 것이다.
def function(request):
if request.method == "POST":
form = SomeForm(request.POST)
if form.is_valid():
SomeModel = form.save(commit=False)
...
SomeModel.save()
messages.success(request, '성공적으로 등록되었습니다.')
return redirect('SomeApp:SomeView', SomeModel.id)
else:
messages.error(request, 'Error!')
return redirect('SomeApp:SomeView')
else:
form = SomeForm()
return render(request, 'SomeURL.html', {'form': form})
내가 하고 싶은 것은, if form.is_vaild()가 False일 때 진행되는 else 부분에서 어떤 에러 메시지를 어떻게 출력하는지이다.
(티스토리 에디터가 바뀌어서 코드의 글씨 색깔을 바꿀 수 없어서 불편...)
forms.py를 보자.
from django import forms
import datetime
class RecruitForm(forms.ModelForm):
class Meta:
model = SomeModel
fields = (...SomeFields...)
widgets = {
...
}
help_text = {
...
}
def clean(self):
now = datetime.datetime.now()
form_data = self.cleaned_data
try:
datetime = datetime.datetime.combine(form_data['date'], form_data['time'])
# 날짜 입력과 시간 입력을 합쳐서 datetime으로 만듬
except:
raise forms.ValidationError('시간이 제대로 입력되지 않았습니다. 입력되지 않는다면 크롬이나 모바일로 접속해주세요.')
# 날짜가 과거라면 에러
if datetime <= now:
raise forms.ValidationError('과거의 시간은 입력할 수 없습니다.')
return form_data
내 코드의 경우, date와 time을 가지고 valid를 확인하는 코드이다.
2가지를 valid한지 보는데, 하나는 date와 time이 둘 다 입력되어 있는가, 다른 것은 입력한 시간이 미래인가이다.
두 가지 경우에 따라 다른 에러 메시지를 보내고 싶다.
raise forms.ValidationError라는 코드를 사용하고 뒤에 출력하고 싶은 에러 메시지를 넣는다.
Django Document를 보면 에러 메시지만 쓰지 말고 타입이나 그런 걸 같이 쓰라는데, 나는 메시지만 보여주고 싶기 때문에 이렇게 썼다.
이렇게 간단하게 써도 에러는 안 난다.
만약 잘못된 값이 입력되어서 views.py로 invalid 하다고 정보를 보내면 views.py에서는 그 정보를 어떻게 처리할까?
Form API로 간단하게 사용할 수 있다.
form = SomeForm(request.POST)
form.errors # print(form.errors)를 하면 html로 표시된다.
form.non_field_errors() # message만 보여준다.
messages.error(request, form.non_field_errors())
views.py에서 form을 불러오면 form.errors를 사용할 수 있다.
django의 message를 이용한다면 form.non_field_errors()라는 함수로 forms에서 넘겨준 에러를 정확히 출력할 수 있다.
만약 non_field_erros() 대신에 errors를 넣으면 list 형태로 출력되는데, __all__이라는 쓸데없는 표시도 뜬다.
이걸 이렇게 저렇게 어찌어찌 쓰면 더 유용할 수 있지만 나는 간단하게 쓸 것이기 때문에 그렇게 사용하지 않았다.
django message를 이용하는 방법은 여기.
끝.
'gistalk 개발' 카테고리의 다른 글
Django tas app 11 : 통계페이지 (0) | 2020.04.13 |
---|---|
python 3.8 & Django 3.0 설치 (0) | 2020.03.13 |
Django tas app 추가 6 : template tags & filters (0) | 2018.07.02 |
crawling하기 (0) | 2018.03.19 |
[그냥 메모]카카오톡 api 사용 (0) | 2018.03.01 |
- Total
- Today
- Yesterday
- Python
- queryset
- MBCF
- django
- Collaborative Filtering
- memory-based
- matrix factorization
- item-based
- 메모리기반
- WSL2
- gensim
- n core setting
- ifkakao
- KAKAO
- django3
- matrix market
- pythonpython
- 협업필터링
- buffalo
- django mysql database sqlite
- MachineLearning #KMenas #KoNLPy #Word2Vec #AI #ML #인공지능 #Unsupervised #Clustering #Classification
- python3.8
- pytorch
- 서버환경
- Supervised Learning #KoNLPy #Keras #NLP #자연어처리 #글 분류 #LSTM
- 아이템기반
- IBCF
- windows subsystem for lunux
- 추천
- javascrip
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |