Jquery Ajax 发布以更新视图中的 django 会话

Posted

技术标签:

【中文标题】Jquery Ajax 发布以更新视图中的 django 会话【英文标题】:Jquery Ajax post to update django sessions in views 【发布时间】:2013-11-04 04:12:30 【问题描述】:

我正在从我的表单字段中发送值,以便将它们存储在 django 的会话中。我正在执行以下操作,但它没有在 django 的 POST 中接收数据。

<script type="text/javascript">

    var eventID = $('#id_eventID').val();
    var start = $('#id_start').val();
   $('a').click(function ()    
    console.log("Inside click");    
    $.post(
       url: "/update_session/",
       type: "POST",
       data: eventID: eventID, start: start,
       success: function(response),
       complete: function(),
       error: function (xhr, textStatus, thrownError)
        alert("Error in ajax post");
       
    );
    );
</script>

 <a href="Event/field.name"> Add signal</a>

我希望当我单击上面的链接时执行此脚本,这反过来会打开一个新表单。因此,当我回到原始页面时(填写表格后),我希望能够检索将存储在会话中的所有数据(以我上面所做的方式)。

在我的 view.py 我有以下内容,

def update_session(request):
    print request.POST
    if request.is_ajax():
  try:
    request.session['eventID'] = request.POST['eventID']
    request.session['start'] = request.POST['start']
  except KeyError:
    return HttpResponse('Error')
    else:
  raise Http404

有了这个,我的 django termianl 中什么也没有打印出来。它显示一个空的 Querydict。

另外,我实现所需功能的方法是否正确?还是有更好的方法来实现这一点..我是网络开发的新手.. 所以,一些来源或提示会很棒!

更新: *urls.py*

from django.conf.urls import patterns, url
from EiEventService import views

urlpatterns = patterns('',
   url(r'^$', views.event_view),
   url(r'^create/$', views.event_create),
   url(r'^eventSignals/$', views.eventSignal_create),
   url(r'^Intervals/$', views.interval_create),
   url(r'^eventBaseLine/$', views.EventBaseline_create),
   #url(r'^(?P<event_id>.*)/$', views.editEvent),
)

在视图中进行更改并在 urls.py 中添加如 Limelights 所述。 我收到以下错误。整个回溯是,

Traceback (most recent call last):
File "/usr/lib/python2.7/wsgiref/handlers.py", line 86, in run
  self.finish_response()
File "/usr/lib/python2.7/wsgiref/handlers.py", line 127, in finish_response
  self.write(data)
File "/usr/lib/python2.7/wsgiref/handlers.py", line 210, in write
  self.send_headers()
File "/usr/lib/python2.7/wsgiref/handlers.py", line 268, in send_headers
  self.send_preamble()
File "/usr/lib/python2.7/wsgiref/handlers.py", line 192, in send_preamble
  'Date: %s\r\n' % format_date_time(time.time())
File "/usr/lib/python2.7/socket.py", line 324, in write
  self.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
  self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 59495)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 582, in process_request_thread
  self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
  self.RequestHandlerClass(request, client_address, self)
File "/usr/local/lib/python2.7/dist-packages/Django-1.5.1-py2.7.egg/django/core/servers/basehttp.py", line 150, in __init__
  super(WSGIRequestHandler, self).__init__(*args, **kwargs)
File "/usr/lib/python2.7/SocketServer.py", line 640, in __init__
  self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 693, in finish
  self.wfile.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
  self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

【问题讨论】:

好吧,我在 urls.py wrt ajax 请求中没有指定任何内容。我认为它会使用帖子中的 url 中提到的 url...我不知道 url.py wrt ajax 调用中要写什么...我阅读了一些示例,但没有提到任何关于 url 的内容。 py 好吧,你必须在 urls.py 文件中定义 /update_session/ url 以便 Django 获取它。可以发一下吗? 请查看更新后的问题 urls.py 为我的应用程序。另外,达到预期结果的方式是否正确? 【参考方案1】:

您必须将 /update_session/ 网址添加到您的 urls.py - 这是您遇到的首要问题。这也是您的脚本无法到达服务器的原因。

url(r'^/update_session/$', views.update_session)

将是此的 url 模式。

此外,您还有一些其他问题将在您的开发后期出现,因此我强烈建议您阅读tutorial here

【讨论】:

我确实添加了这一点,并且还稍微改变了视图。但是我得到一个打印回溯的错误。我还阅读了您提到的链接,我知道我需要在我的代码中解决很多细节问题。您是否在我的代码中发现任何错误,您说我以后开发时会遇到问题。 可以吗...我们只是通过 ajax 调用将会话保存在 django 中并且不返回任何内容...渲染父表单时必须使用会话..我假设会话是存储在服务器中,直到它被删除或设置超时..如果我错了,请纠正我

以上是关于Jquery Ajax 发布以更新视图中的 django 会话的主要内容,如果未能解决你的问题,请参考以下文章

如何从MVC5中的jquery ajax调用中获取部分视图和JSON数据?

让 ajax 加载的部分视图中的元素触发 jquery 事件(引导模式形式)

如果会话超时,如何在 MVC 中的 jquery ajax 调用后重定向到新页面?

如何使用 jquery 或 ajax 在 c#/asp.net 中为 MVC 项目更新 razor 部分视图

ASP.NET MVC 主视图引用的js(jquery)在分部视图中无效,如何解决?

使用 AJAX 更新部分页面后,DataTables jquery add in 消失