##// END OF EJS Templates
Implemented form validation. When the form fails validation, showing the index page.
neko259 -
r29:575870f6 default
parent child Browse files
Show More
@@ -1,8 +1,41 b''
1 from django import forms
1 from django import forms
2
2
3
3
4 class NewThreadForm(forms.Form):
4 class PostForm(forms.Form):
5 title = forms.CharField(max_length=100)
5 MAX_TEXT_LENGTH = 10000
6 text = forms.CharField(widget=forms.Textarea)
6 MAX_IMAGE_SIZE = 8 * 1024 * 1024
7 image = forms.ImageField()
7
8 tags = forms.CharField(max_length=100)
8 title = forms.CharField(max_length=50, required=False)
9 text = forms.CharField(widget=forms.Textarea, required=False)
10 image = forms.ImageField(required=False)
11 tags = forms.CharField(max_length=100, required=False)
12
13 def clean_text(self):
14 text = self.cleaned_data['text']
15 if text:
16 if len(text) > self.MAX_TEXT_LENGTH:
17 raise forms.ValidationError('Too many text')
18 return text
19
20 def clean_image(self):
21 image = self.cleaned_data['image']
22 if image:
23 if image._size > self.MAX_IMAGE_SIZE:
24 raise forms.ValidationError('Too large image: more than ' +
25 str(self.MAX_IMAGE_SIZE) + ' bytes')
26 return image
27
28 def clean(self):
29 cleaned_data = super(PostForm, self).clean()
30
31 text = cleaned_data.get('text')
32 image = cleaned_data.get('image')
33
34 if (not text) and (not image):
35 raise forms.ValidationError('Enter either text or image')
36
37 return cleaned_data
38
39
40 class ThreadForm(PostForm):
41 tags = forms.CharField(max_length=100) No newline at end of file
@@ -1,5 +1,7 b''
1 import os
1 from django.db import models
2 from django.db import models
2 from django.utils import timezone
3 from django.utils import timezone
4 import time
3
5
4 from neboard import settings
6 from neboard import settings
5
7
@@ -10,6 +12,14 b" NO_IP = '0.0.0.0'"
10 UNKNOWN_UA = ''
12 UNKNOWN_UA = ''
11
13
12
14
15 def update_image_filename(instance, filename):
16 """Get unique image filename"""
17
18 path = 'images/'
19 new_name = str(int(time.mktime(time.gmtime()))) + '_' + filename
20 return os.path.join(path, new_name)
21
22
13 class PostManager(models.Manager):
23 class PostManager(models.Manager):
14 def create_post(self, title, text, image=None, parent_id=NO_PARENT,
24 def create_post(self, title, text, image=None, parent_id=NO_PARENT,
15 ip=NO_IP, tags=None):
25 ip=NO_IP, tags=None):
@@ -108,10 +118,10 b' class Post(models.Model):'
108
118
109 objects = PostManager()
119 objects = PostManager()
110
120
111 title = models.CharField(max_length=100)
121 title = models.CharField(max_length=50)
112 pub_time = models.DateTimeField()
122 pub_time = models.DateTimeField()
113 text = models.TextField()
123 text = models.TextField()
114 image = thumbs.ImageWithThumbsField(upload_to='images/',
124 image = thumbs.ImageWithThumbsField(upload_to=update_image_filename,
115 blank=True, sizes=((200, 150),))
125 blank=True, sizes=((200, 150),))
116 poster_ip = models.IPAddressField()
126 poster_ip = models.IPAddressField()
117 poster_user_agent = models.TextField()
127 poster_user_agent = models.TextField()
@@ -1,5 +1,5 b''
1 html {
1 html {
2 background: #333;
2 background: #444;
3 color: #ffffff;
3 color: #ffffff;
4 }
4 }
5
5
@@ -15,11 +15,11 b' html {'
15
15
16 .post-form {
16 .post-form {
17 text-align: left;
17 text-align: left;
18 color: #ffffff;
19 display: table;
18 display: table;
20 border: dashed 1px;
19 border-radius: 5px;
21 padding: 3px;
20 padding: 5px;
22 margin: 5px;
21 margin: 5px;
22 background: #334;
23 }
23 }
24
24
25 .form-row {
25 .form-row {
@@ -60,10 +60,9 b' html {'
60 }
60 }
61
61
62 .post {
62 .post {
63 background: #222;
63 background: #333;
64 margin: 5px;
64 margin: 5px;
65 padding: 5px;
65 padding: 10px;
66 border: solid 1px;
67 border-radius: 5px;
66 border-radius: 5px;
68 }
67 }
69
68
@@ -1,7 +1,7 b''
1 from django.template import RequestContext
1 from django.template import RequestContext
2 from boards import forms
2 from boards import forms
3 import boards
3 import boards
4 from boards.forms import NewThreadForm
4 from boards.forms import ThreadForm, PostForm
5 from boards.models import Post, Admin, Tag
5 from boards.models import Post, Admin, Tag
6 from django.shortcuts import render, get_list_or_404, redirect
6 from django.shortcuts import render, get_list_or_404, redirect
7 from django.http import HttpResponseRedirect, Http404
7 from django.http import HttpResponseRedirect, Http404
@@ -16,7 +16,7 b' def index(request):'
16 threads = Post.objects.get_threads()
16 threads = Post.objects.get_threads()
17
17
18 context['threads'] = None if len(threads) == 0 else threads
18 context['threads'] = None if len(threads) == 0 else threads
19 context['form'] = forms.NewThreadForm()
19 context['form'] = forms.ThreadForm()
20
20
21 return render(request, 'posting_general.html',
21 return render(request, 'posting_general.html',
22 context)
22 context)
@@ -25,13 +25,21 b' def index(request):'
25 def new_post(request, thread_id=boards.models.NO_PARENT):
25 def new_post(request, thread_id=boards.models.NO_PARENT):
26 """Add a new post (in thread or as a reply)."""
26 """Add a new post (in thread or as a reply)."""
27
27
28 form = NewThreadForm(request.POST, request.FILES)
28 if thread_id == boards.models.NO_PARENT:
29 form = ThreadForm(request.POST, request.FILES)
30 else:
31 form = PostForm(request.POST, request.FILES)
29
32
30 title = request.POST['title']
33 if form.is_valid():
31 text = request.POST['text']
34 data = form.cleaned_data
35 else:
36 return redirect(index)
32
37
33 if 'image' in request.FILES.keys():
38 title = data['title']
34 image = request.FILES['image']
39 text = data['text']
40
41 if 'image' in data.keys():
42 image = data['image']
35 else:
43 else:
36 image = None
44 image = None
37
45
@@ -39,7 +47,7 b' def new_post(request, thread_id=boards.m'
39
47
40 tags = []
48 tags = []
41 if thread_id == boards.models.NO_PARENT:
49 if thread_id == boards.models.NO_PARENT:
42 tag_strings = request.POST['tags']
50 tag_strings = data['tags']
43
51
44 if tag_strings:
52 if tag_strings:
45 tag_strings = tag_strings.split(',')
53 tag_strings = tag_strings.split(',')
@@ -74,7 +82,7 b' def tag(request, tag_name):'
74 context['threads'] = None if len(threads) == 0 else threads
82 context['threads'] = None if len(threads) == 0 else threads
75 context['tag'] = tag_name
83 context['tag'] = tag_name
76
84
77 context['form'] = forms.NewThreadForm(initial={'tags': tag_name})
85 context['form'] = forms.ThreadForm(initial={'tags': tag_name})
78
86
79 return render(request, 'posting_general.html',
87 return render(request, 'posting_general.html',
80 context)
88 context)
@@ -92,7 +100,7 b' def thread(request, post_id):'
92 context = RequestContext(request)
100 context = RequestContext(request)
93 context['posts'] = posts
101 context['posts'] = posts
94
102
95 context['form'] = forms.NewThreadForm()
103 context['form'] = forms.PostForm()
96
104
97 return render(request, 'thread.html', context)
105 return render(request, 'thread.html', context)
98
106
General Comments 0
You need to be logged in to leave comments. Login now