Show More
@@ -1,8 +1,41 b'' | |||||
1 | from django import forms |
|
1 | from django import forms | |
2 |
|
2 | |||
3 |
|
3 | |||
4 |
class |
|
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 |
t |
|
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= |
|
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= |
|
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: # |
|
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: |
|
19 | border-radius: 5px; | |
21 |
padding: |
|
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: # |
|
63 | background: #333; | |
64 | margin: 5px; |
|
64 | margin: 5px; | |
65 |
padding: |
|
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 |
|
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. |
|
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 = |
|
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. |
|
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. |
|
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