19
19
@login_required ()
20
20
@csrf_exempt
21
21
def chat_view (request ):
22
- if request .method == ' POST' :
22
+ if request .method == " POST" :
23
23
client = OpenAI (
24
24
api_key = settings .OPENAI_API_KEY ,
25
25
)
26
26
27
27
data = json .loads (request .body )
28
- message = data .get (' message' , '' )
28
+ message = data .get (" message" , "" )
29
29
response = client .chat .completions .create (
30
30
model = "gpt-4o-mini" ,
31
- messages = [{"role" : "user" , "content" : message }]
31
+ messages = [
32
+ {
33
+ "role" : "user" ,
34
+ "content" : f"Respond to the following: { message } , and return only plain text. Avoid any code formatting or backticks." ,
35
+ }
36
+ ],
32
37
)
33
38
reply = response .choices [0 ].message .content
34
- return JsonResponse ({'reply' : reply })
39
+ return JsonResponse ({"reply" : reply })
40
+
35
41
36
42
@login_required ()
37
43
def chat_page (request ):
38
- return render (request , 'polls/chat.html' )
44
+ return render (request , "polls/chat.html" )
45
+
39
46
40
47
@login_required ()
41
48
def polls_list (request ):
42
49
all_polls = Poll .objects .all ()
43
- search_term = ''
44
- if ' name' in request .GET :
45
- all_polls = all_polls .order_by (' text' )
50
+ search_term = ""
51
+ if " name" in request .GET :
52
+ all_polls = all_polls .order_by (" text" )
46
53
47
- if ' date' in request .GET :
48
- all_polls = all_polls .order_by (' pub_date' )
54
+ if " date" in request .GET :
55
+ all_polls = all_polls .order_by (" pub_date" )
49
56
50
- if ' vote' in request .GET :
51
- all_polls = all_polls .annotate (Count (' vote' )).order_by (' vote__count' )
57
+ if " vote" in request .GET :
58
+ all_polls = all_polls .annotate (Count (" vote" )).order_by (" vote__count" )
52
59
53
- if ' search' in request .GET :
54
- search_term = request .GET [' search' ]
60
+ if " search" in request .GET :
61
+ search_term = request .GET [" search" ]
55
62
all_polls = all_polls .filter (text__icontains = search_term )
56
63
57
64
paginator = Paginator (all_polls , 6 ) # Show 6 contacts per page
58
- page = request .GET .get (' page' )
65
+ page = request .GET .get (" page" )
59
66
polls = paginator .get_page (page )
60
67
61
68
get_dict_copy = request .GET .copy ()
62
- params = get_dict_copy .pop (' page' , True ) and get_dict_copy .urlencode ()
69
+ params = get_dict_copy .pop (" page" , True ) and get_dict_copy .urlencode ()
63
70
64
71
context = {
65
- ' polls' : polls ,
66
- ' params' : params ,
67
- ' search_term' : search_term ,
72
+ " polls" : polls ,
73
+ " params" : params ,
74
+ " search_term" : search_term ,
68
75
}
69
- return render (request , 'polls/polls_list.html' , context )
76
+ return render (request , "polls/polls_list.html" , context )
77
+
70
78
71
79
@login_required ()
72
80
def dashboard (request ):
73
81
polls = Poll .objects .all ()
74
82
poll_data = []
75
83
76
84
for poll in polls :
77
- unique_voters = Vote .objects .filter (poll = poll ).values ('user' ).distinct ().count ()
78
- poll_data .append ({'question' : poll .text , 'unique_voters' : unique_voters })
85
+ unique_voters = Vote .objects .filter (poll = poll ).values ("user" ).distinct ().count ()
86
+ poll_data .append ({"question" : poll .text , "unique_voters" : unique_voters })
87
+
88
+ context = {"poll_data" : poll_data }
89
+ return render (request , "polls/dashboard.html" , context )
79
90
80
- context = {'poll_data' : poll_data }
81
- return render (request , 'polls/dashboard.html' , context )
82
91
83
92
@login_required ()
84
93
def list_by_user (request ):
85
94
all_polls = Poll .objects .filter (owner = request .user )
86
95
paginator = Paginator (all_polls , 7 ) # Show 7 contacts per page
87
96
88
- page = request .GET .get (' page' )
97
+ page = request .GET .get (" page" )
89
98
polls = paginator .get_page (page )
90
99
91
100
context = {
92
- ' polls' : polls ,
101
+ " polls" : polls ,
93
102
}
94
- return render (request , ' polls/polls_list.html' , context )
103
+ return render (request , " polls/polls_list.html" , context )
95
104
96
105
97
106
@login_required ()
98
107
def polls_add (request ):
99
- if request .user .has_perm (' polls.add_poll' ):
100
- if request .method == ' POST' :
108
+ if request .user .has_perm (" polls.add_poll" ):
109
+ if request .method == " POST" :
101
110
form = PollAddForm (request .POST )
102
111
if form .is_valid :
103
112
poll = form .save (commit = False )
104
113
poll .owner = request .user
105
114
poll .save ()
106
- Choice (
107
- poll = poll , choice_text = form .cleaned_data ['choice1' ]).save ()
108
- Choice (
109
- poll = poll , choice_text = form .cleaned_data ['choice2' ]).save ()
115
+ Choice (poll = poll , choice_text = form .cleaned_data ["choice1" ]).save ()
116
+ Choice (poll = poll , choice_text = form .cleaned_data ["choice2" ]).save ()
110
117
111
118
messages .success (
112
- request , "Poll & Choices added successfully." , extra_tags = 'alert alert-success alert-dismissible fade show' )
119
+ request ,
120
+ "Poll & Choices added successfully." ,
121
+ extra_tags = "alert alert-success alert-dismissible fade show" ,
122
+ )
113
123
114
- return redirect (' polls:list' )
124
+ return redirect (" polls:list" )
115
125
else :
116
126
form = PollAddForm ()
117
127
context = {
118
- ' form' : form ,
128
+ " form" : form ,
119
129
}
120
- return render (request , ' polls/add_poll.html' , context )
130
+ return render (request , " polls/add_poll.html" , context )
121
131
else :
122
132
return HttpResponse ("Sorry but you don't have permission to do that!" )
123
133
@@ -126,146 +136,167 @@ def polls_add(request):
126
136
def polls_edit (request , poll_id ):
127
137
poll = get_object_or_404 (Poll , pk = poll_id )
128
138
if request .user != poll .owner :
129
- return redirect (' home' )
139
+ return redirect (" home" )
130
140
131
- if request .method == ' POST' :
141
+ if request .method == " POST" :
132
142
form = EditPollForm (request .POST , instance = poll )
133
143
if form .is_valid :
134
144
form .save ()
135
- messages .success (request , "Poll Updated successfully." ,
136
- extra_tags = 'alert alert-success alert-dismissible fade show' )
145
+ messages .success (
146
+ request ,
147
+ "Poll Updated successfully." ,
148
+ extra_tags = "alert alert-success alert-dismissible fade show" ,
149
+ )
137
150
return redirect ("polls:list" )
138
151
139
152
else :
140
153
form = EditPollForm (instance = poll )
141
154
142
- return render (request , "polls/poll_edit.html" , {' form' : form , ' poll' : poll })
155
+ return render (request , "polls/poll_edit.html" , {" form" : form , " poll" : poll })
143
156
144
157
145
158
@login_required
146
159
def polls_delete (request , poll_id ):
147
160
poll = get_object_or_404 (Poll , pk = poll_id )
148
161
if request .user != poll .owner :
149
- return redirect (' home' )
162
+ return redirect (" home" )
150
163
poll .delete ()
151
- messages .success (request , "Poll Deleted successfully." ,
152
- extra_tags = 'alert alert-success alert-dismissible fade show' )
164
+ messages .success (
165
+ request ,
166
+ "Poll Deleted successfully." ,
167
+ extra_tags = "alert alert-success alert-dismissible fade show" ,
168
+ )
153
169
return redirect ("polls:list" )
154
170
155
171
156
172
@login_required
157
173
def add_choice (request , poll_id ):
158
174
poll = get_object_or_404 (Poll , pk = poll_id )
159
175
if request .user != poll .owner :
160
- return redirect (' home' )
176
+ return redirect (" home" )
161
177
162
- if request .method == ' POST' :
178
+ if request .method == " POST" :
163
179
form = ChoiceAddForm (request .POST )
164
180
if form .is_valid :
165
181
new_choice = form .save (commit = False )
166
182
new_choice .poll = poll
167
183
new_choice .save ()
168
184
messages .success (
169
- request , "Choice added successfully." , extra_tags = 'alert alert-success alert-dismissible fade show' )
170
- return redirect ('polls:edit' , poll .id )
185
+ request ,
186
+ "Choice added successfully." ,
187
+ extra_tags = "alert alert-success alert-dismissible fade show" ,
188
+ )
189
+ return redirect ("polls:edit" , poll .id )
171
190
else :
172
191
form = ChoiceAddForm ()
173
192
context = {
174
- ' form' : form ,
193
+ " form" : form ,
175
194
}
176
- return render (request , ' polls/add_choice.html' , context )
195
+ return render (request , " polls/add_choice.html" , context )
177
196
178
197
179
198
@login_required
180
199
def choice_edit (request , choice_id ):
181
200
choice = get_object_or_404 (Choice , pk = choice_id )
182
201
poll = get_object_or_404 (Poll , pk = choice .poll .id )
183
202
if request .user != poll .owner :
184
- return redirect (' home' )
203
+ return redirect (" home" )
185
204
186
- if request .method == ' POST' :
205
+ if request .method == " POST" :
187
206
form = ChoiceAddForm (request .POST , instance = choice )
188
207
if form .is_valid :
189
208
new_choice = form .save (commit = False )
190
209
new_choice .poll = poll
191
210
new_choice .save ()
192
211
messages .success (
193
- request , "Choice Updated successfully." , extra_tags = 'alert alert-success alert-dismissible fade show' )
194
- return redirect ('polls:edit' , poll .id )
212
+ request ,
213
+ "Choice Updated successfully." ,
214
+ extra_tags = "alert alert-success alert-dismissible fade show" ,
215
+ )
216
+ return redirect ("polls:edit" , poll .id )
195
217
else :
196
218
form = ChoiceAddForm (instance = choice )
197
219
context = {
198
- ' form' : form ,
199
- ' edit_choice' : True ,
200
- ' choice' : choice ,
220
+ " form" : form ,
221
+ " edit_choice" : True ,
222
+ " choice" : choice ,
201
223
}
202
- return render (request , ' polls/add_choice.html' , context )
224
+ return render (request , " polls/add_choice.html" , context )
203
225
204
226
205
227
@login_required
206
228
def choice_delete (request , choice_id ):
207
229
choice = get_object_or_404 (Choice , pk = choice_id )
208
230
poll = get_object_or_404 (Poll , pk = choice .poll .id )
209
231
if request .user != poll .owner :
210
- return redirect (' home' )
232
+ return redirect (" home" )
211
233
choice .delete ()
212
234
messages .success (
213
- request , "Choice Deleted successfully." , extra_tags = 'alert alert-success alert-dismissible fade show' )
214
- return redirect ('polls:edit' , poll .id )
235
+ request ,
236
+ "Choice Deleted successfully." ,
237
+ extra_tags = "alert alert-success alert-dismissible fade show" ,
238
+ )
239
+ return redirect ("polls:edit" , poll .id )
215
240
216
241
217
242
def poll_detail (request , poll_id ):
218
243
poll = get_object_or_404 (Poll , id = poll_id )
219
244
220
245
if not poll .active :
221
- return render (request , ' polls/poll_result.html' , {' poll' : poll })
246
+ return render (request , " polls/poll_result.html" , {" poll" : poll })
222
247
loop_count = poll .choice_set .count ()
223
248
context = {
224
- ' poll' : poll ,
225
- ' loop_time' : range (0 , loop_count ),
249
+ " poll" : poll ,
250
+ " loop_time" : range (0 , loop_count ),
226
251
}
227
- return render (request , ' polls/poll_detail.html' , context )
252
+ return render (request , " polls/poll_detail.html" , context )
228
253
229
254
230
255
@login_required
231
256
def poll_vote (request , poll_id ):
232
257
poll = get_object_or_404 (Poll , pk = poll_id )
233
- choice_id = request .POST .get (' choice' )
258
+ choice_id = request .POST .get (" choice" )
234
259
if not poll .user_can_vote (request .user ):
235
260
messages .error (
236
- request , "You already voted this poll!" , extra_tags = 'alert alert-warning alert-dismissible fade show' )
261
+ request ,
262
+ "You already voted this poll!" ,
263
+ extra_tags = "alert alert-warning alert-dismissible fade show" ,
264
+ )
237
265
return redirect ("polls:list" )
238
266
239
267
if choice_id :
240
268
choice = Choice .objects .get (id = choice_id )
241
269
vote = Vote (user = request .user , poll = poll , choice = choice )
242
- vote .save ()
270
+ vote .save ()
243
271
244
272
# get poll creator email
245
273
poll_creator_email = poll .owner .email
246
274
# Construct the email
247
- subject = f' New vote for your poll: { poll .text } '
275
+ subject = f" New vote for your poll: { poll .text } "
248
276
message = f'A new vote has been cast for your poll "{ poll .text } ".'
249
277
# Send the email
250
- send_mail (subject , message , settings .EMAIL_HOST_USER , [poll_creator_email ])
278
+ send_mail (subject , message , settings .EMAIL_HOST_USER , [poll_creator_email ])
251
279
252
- return render (request , ' polls/poll_result.html' , {' poll' : poll })
280
+ return render (request , " polls/poll_result.html" , {" poll" : poll })
253
281
else :
254
282
messages .error (
255
- request , "No choice selected!" , extra_tags = 'alert alert-warning alert-dismissible fade show' )
283
+ request ,
284
+ "No choice selected!" ,
285
+ extra_tags = "alert alert-warning alert-dismissible fade show" ,
286
+ )
256
287
return redirect ("polls:detail" , poll_id )
257
- return render (request , ' polls/poll_result.html' , {' poll' : poll })
288
+ return render (request , " polls/poll_result.html" , {" poll" : poll })
258
289
259
290
260
291
@login_required
261
292
def end_poll (request , poll_id ):
262
293
poll = get_object_or_404 (Poll , pk = poll_id )
263
294
if request .user != poll .owner :
264
- return redirect (' home' )
295
+ return redirect (" home" )
265
296
266
297
if poll .active is True :
267
298
poll .active = False
268
299
poll .save ()
269
- return render (request , ' polls/poll_result.html' , {' poll' : poll })
300
+ return render (request , " polls/poll_result.html" , {" poll" : poll })
270
301
else :
271
- return render (request , ' polls/poll_result.html' , {' poll' : poll })
302
+ return render (request , " polls/poll_result.html" , {" poll" : poll })
0 commit comments