forms.py
61 lines
| 1.8 KiB
| text/x-python
|
PythonLexer
/ boards / forms.py
Ilyas
|
r14 | from django import forms | |
neko259
|
r35 | from neboard import settings | |
Ilyas
|
r14 | ||
neko259
|
r16 | ||
neko259
|
r29 | class PostForm(forms.Form): | |
MAX_TEXT_LENGTH = 10000 | |||
MAX_IMAGE_SIZE = 8 * 1024 * 1024 | |||
title = forms.CharField(max_length=50, required=False) | |||
text = forms.CharField(widget=forms.Textarea, required=False) | |||
image = forms.ImageField(required=False) | |||
def clean_text(self): | |||
text = self.cleaned_data['text'] | |||
if text: | |||
if len(text) > self.MAX_TEXT_LENGTH: | |||
raise forms.ValidationError('Too many text') | |||
return text | |||
def clean_image(self): | |||
image = self.cleaned_data['image'] | |||
if image: | |||
if image._size > self.MAX_IMAGE_SIZE: | |||
raise forms.ValidationError('Too large image: more than ' + | |||
str(self.MAX_IMAGE_SIZE) + ' bytes') | |||
return image | |||
def clean(self): | |||
cleaned_data = super(PostForm, self).clean() | |||
text = cleaned_data.get('text') | |||
image = cleaned_data.get('image') | |||
if (not text) and (not image): | |||
raise forms.ValidationError('Enter either text or image') | |||
return cleaned_data | |||
class ThreadForm(PostForm): | |||
neko259
|
r57 | INVALID_TAG_CHARACTERS = ['+', '/', '&', '=', '?', '-', '.', ','] | |
neko259
|
r33 | ||
neko259
|
r31 | tags = forms.CharField(max_length=100) | |
def clean_tags(self): | |||
tags = self.cleaned_data['tags'] | |||
if tags: | |||
neko259
|
r33 | for character in tags: | |
if character in self.INVALID_TAG_CHARACTERS: | |||
raise forms.ValidationError( | |||
'Inappropriate characters in tags') | |||
neko259
|
r31 | ||
return tags | |||
def clean(self): | |||
cleaned_data = super(ThreadForm, self).clean() | |||
neko259
|
r35 | return cleaned_data | |
class SettingsForm(forms.Form): | |||
theme = forms.ChoiceField(choices=settings.THEMES, widget=forms.RadioSelect) |