Редактировать: я использую Django.
Я использую следующую функцию. Поскольку эта функция используется для публикации данных, мне нужно добавить защиту csrf. Итак, я добавляю @csrf_protect перед функцией. Кроме того, как уже упоминалось, мне нужно установить RequestContext, но я не мог понять, как это сделать, используя / возвращая json_response.
def message_updates(self, request):
cursor = request.session.get('cursor')
if not self.cache or cursor == self.cache[-1]['id']:
self.new_message_event.wait()
assert cursor != self.cache[-1]['id'], cursor
try:
for index, m in enumerate(self.cache):
if m['id'] == cursor:
return json_response({'messages': self.cache[index + 1:]})
return json_response({'messages': self.cache})
finally:
if self.cache:
request.session['cursor'] = self.cache[-1]['id']
else:
request.session.pop('cursor', None)
В обычном случае я пишу что-то вроде следующего:
@csrf_protect
def main(self, request):
if self.cache:
request.session['cursor'] = self.cache[-1]['id']
return render_to_response('index.html', {'MEDIA_URL': settings.MEDIA_URL, 'messages': self.cache},context_instance=RequestContext(request))