-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathquestion.py
177 lines (142 loc) · 5.42 KB
/
question.py
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# coding=utf-8
import webapp2
from google.appengine.api import users
from shared import *
from model.question import *
from model.answer import *
# from service.answer import answer as AnswerService
from service.answer import AnswerService
from service.question import QuestionService
from service.entity import EntityService
from module.question import *
from nodes import *
class QuestionHandler(BaseHandler):
def get(self, question_id):
context = {
'render_question_page': self.render_question_page(question_id)
}
self.render('question.html', context)
def render_question_page(self, question_id = 0):
meta = {
'question_id': question_id
}
question_page = ZNodeQuestionPage(self, meta)
question_page.set_root_node()
return question_page.render()
def pagelet(self, question_id):
ref_element = self.request.get('ref_element')
meta = {
'question_id': question_id
}
question_page = ZNodeQuestionPage(self, meta)
response = self.get_ajax_response();
pagelet = Pagelet(question_page)
pagelet.set_ref_element(ref_element)
pagelet.set_render_position(PAGELET_RENDER_POSITION.BEFORE)
pagelet.set_render_type(PAGELET_RENDER_TYPE.DECORATION)
response.add_pagelet(pagelet)
self.output_ajax_response(response)
class QuestionEditHandler(BaseHandler):
def get(self, question_id):
question = Question.get_by_id(int(question_id))
context = {
'form_label': u'编辑问题',
'action_uri': self.uri_for('question.edit', question_id = question.key.id()),
'current_question': question
}
self.render('question_add.html', context)
def post(self, question_id):
question = Question.get_by_id(int(question_id))
if not question:
return
#TODO: Parse question object in helper method.
title = self.request.get('title')
#TODO: file desc content using hlper method.
description = self.request.get('description').replace("\n", "<br />")
if title:
question.title = title
question.description = description
question.put()
self.redirect(self.uri_for('question', question_id = question.key.id()))
class QuestionAddAnswerHandler(BaseHandler):
def get(self):
pass
def post(self, question_id):
source = self.request.get('source')
answer_list_wrap = self.request.get('answer_list_wrap_id')
answer = QuestionService().add_answer(question_id, source, self.get_current_account())
meta = {
'question_id': question_id,
'answer_id': answer.key.id(),
'hide_answer_meta': 0
}
# Update edit form pagelet.
edit_form_id = self.request.get('edit_form_id')
edit_form_disabled_info = ZNodeAnswerEditFormDisabledInfo(self)
pagelet = Pagelet(edit_form_disabled_info)
pagelet.set_ref_element(edit_form_id) \
.set_render_position(PAGELET_RENDER_POSITION.BEFORE)
response = self.get_ajax_response()
response.add_pagelet(pagelet)
# New answer pagelet.
answer_node = ZNodeAnswer(self, meta)
pagelet = Pagelet(answer_node)
pagelet.set_ref_element(answer_list_wrap) \
.set_render_position(PAGELET_RENDER_POSITION.APPEND)
response = self.get_ajax_response()
response.add_pagelet(pagelet)
self.output_ajax_response(response)
# if answer:
# self.redirect(self.uri_for('question', question_id = answer.question.id()))
# else:
# error = QuestionService().get_last_error()
# self.set_error(error)
class QuestionDeleteHandler(BaseHandler):
def get(self, question_id):
#TODO: Should be a post action.
QuestionService().delete_question(question_id)
self.redirect(self.uri_for('home'))
def post(self, question_id):
pass
class QuestionAddHandler(BaseHandler):
def get(self):
q = Question()
q.title = ''
context = {
'form_label': u'添加问题',
'action_uri': self.uri_for('question.add'),
'current_question': q
}
self.render('question_add.html', context)
def post(self):
title = self.request.get('title')
if title:
question = Question()
question.title = title
question.description = self.request.get('description').replace("\n", "<br />")
question.creator = self.get_current_account().key
question.put()
self.redirect(self.uri_for('question', question_id = question.key.id()))
else:
self.redirect(self.uri_for('question.add'))
class QuestionFocusHandler(BaseHandler):
def get(self, question_id):
return self.post(question_id)
def post(self, question_id):
account = self.get_current_account().key
QuestionService().focus_question(account, question_id)
self.process_live_query()
class QuestionUnFocusHandler(BaseHandler):
def get(self, question_id):
return self.post(question_id)
def post(self, question_id):
account = self.get_current_account().key
QuestionService().unfocus_question(account, question_id)
self.process_live_query()
# app = webapp2.WSGIApplication([
# # webapp2.Route(r'/', handler=HomeHandler, name='home'),
#
# webapp2.Route(r'/question/<question_id:\d+>', handler=QuestionHandler, name="question"),
# webapp2.Route(r'/question/<question_id:\d+>/edit', handler=QuestionEditHandler, name="question.edit"),
# webapp2.Route(r'/question/add', handler=AddQuestionHandler, name="question.add"),
# ], debug = SITE_CONFIG['is_debug'], config=SITE_CONFIG)