【问题标题】:Django sessions between views not working视图之间的 Django 会话不起作用
【发布时间】:2017-06-03 17:52:52
【问题描述】:

我无法在我的坐标函数中访问变量 solo。 调试语句“solo used:”输出“none”。我需要做什么才能使其工作?感谢您的想法。

在views.py中

def go(request):
  print "go executing"
  lat = request.GET.get('latitude', None)
  lng = request.GET.get('longitude', None)
  if not lat or not lng:
    print "ERROR: BAD URL PARAMETERS"
  # call the dronekit module we wrote before
  solo = drone.drone()
  print "solo instantiated: ", solo
  solo.takeoff()
  solo.flyTo(lat,lng, 60)
  resp = "Arrived and landed. <br> <a href=/rtl>Return Home</a>"
  request.session['solo'] = "hello"
  return HttpResponse(resp)

def coordinates(request):
  #print "Request: ", request
  #if request.method == 'GET':
  solo = request.session.get('solo')
  print "solo used: ", solo

  # print "made it to views.py, and lat: ", solo.getlat(), ". lng: ", solo.getlng() 
  #print "lat: ", lat, ". lng: ", lng
  #lat1 = fly_drone.getlat()
  #lat2 = fly_drone.getlng()
  #print "lat1: ", lat1, ". lat2: ", lat2
  return HttpResponse('check')

请注意,我是通过 ajax 从 map.js 调用坐标:

function refreshData()
{
  x = 5;
  setTimeout(refreshData, x*1000);
  console.log("refreshing now");
  $.ajax({
    url: '/coordinates/',
    type: 'get',
    success: function(data){
      //alert(data);
    },
    failure: function(data){
      //alert('Got an error dude');
    }
  })

请注意,我确实在 settings.py 中启用了会话序列化程序:

SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
...
MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]



 INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'skyway_app'
    ]

【问题讨论】:

  • 你的MIDDLEWARE /MIDDLEWARE_CLASSES 中有SessionMiddleware吗?
  • 嘿,拉兹,是的,我愿意..

标签: python ajax django session


【解决方案1】:

如有疑问,read the docs:

  1. 确保django.contrib.sessions.middleware.SessionMiddleware 在您的设置中的MIDDLEWARE 中。
  2. 确保您的会话引擎设置正确
    • 如果您使用的是数据库支持的会话,您必须确保 django.contrib.sessions 在设置中的 INSTALLED_APPS 并且迁移已经运行。

【讨论】:

  • 嘿 2ps,我已经安装了 1. 和 2. :/。抱歉,我应该在最初的描述中包含这个。
  • 您是否已经检查过数据库中的django_session 表?
  • 一直在寻找如何做到这一点,但一直在苦苦挣扎。我该怎么做呢?很抱歉这个蹩脚的问题。
  • 我们都是外行,但您只需输入python manage.py dbshell,它就会让您访问数据库的shell提示符。如果你使用 mysql 或 postgres,你可以输入一个 sql 查询来查找 django_sessions 表:show tables like '%session%' in mysql。
  • 嗯。似乎问题在于我将对象输入会话的视图在我调用另一个视图之前没有完成。我想,解决方案是将视图分成两部分。也就是说,新的挑战是我的对象不能腌制(可能是因为它通过 tcp 连接到模拟器)。我怎样才能让它变得容易出问题或找到其他方式在视图之间传递它?
猜你喜欢
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2015-06-05
相关资源
最近更新 更多