Python 2.7 无法设置和检索会话变量

Python 2.7 无法设置和检索会话变量,python-2.7,django-views,session-cookies,django-1.10,Python 2.7,Django Views,Session Cookies,Django 1.10,使用Django 1.10 我的中间件设置如下: MIDDLEWARE = [ 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'dja

使用Django 1.10

我的中间件设置如下:

MIDDLEWARE = [
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',

'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',


'wagtail.wagtailcore.middleware.SiteMiddleware',
'wagtail.wagtailredirects.middleware.RedirectMiddleware',
]
os.environ['CLIENT_SECRET'] = 'something'
os.environ['CLIENT_ID'] = 'something'
def potato_oauth_callback(request):


  POTATO_OAUTH2_TOKEN_ENDPOINT = "https://login.potato.com/potatoservices/potatooauth2/potatotoken"
  POTATO_SECRET = get from env variables
  POTATO_ID = get from env variables
  POTATO_TYPE = "authorization_code"
  POTATOCALLBACK_URL = "https://potatourl/potatoes/potatocallback"

  authorization_code = request.GET.get('code')

  payload = {
    'potato_type': POTATO_TYPE,
    'potato_id': POTATO_ID,
    'potato_secret': POTATO_SECRET,
    'potato_uri': POTATOCALLBACK_URL,
    'code': potato_code
  }

  r = requests.post(POTATO_OAUTH2_TOKEN_ENDPOINT, data=potatoload)

  resp = r.json()

  potatoAccess = {
    'id': resp['id'],
    'timestamp': resp['issued_at'],
    'instanceURL': resp['instance_url'],
    'signature': resp['signature'],
    'accessToken': resp['access_token']
  }

  request.session['potatoAccess_id'] = potatoAccess['id']
  request.session['potatoAccess_timestamp'] = potatoAccess['timestamp']
  request.session['potatoAccess_instanceURL'] = potatoAccess['instanceURL']
  request.session['potatoAccess_signature'] = potatoAccess['signature']
  request.session['potatoAccess_accessToken'] = potatoAccess['accessToken']

  return HttpResponse(t.render({}, request))
我确保包含会话引擎

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
我的客户密码和身份证设置如下:

MIDDLEWARE = [
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',

'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',


'wagtail.wagtailcore.middleware.SiteMiddleware',
'wagtail.wagtailredirects.middleware.RedirectMiddleware',
]
os.environ['CLIENT_SECRET'] = 'something'
os.environ['CLIENT_ID'] = 'something'
def potato_oauth_callback(request):


  POTATO_OAUTH2_TOKEN_ENDPOINT = "https://login.potato.com/potatoservices/potatooauth2/potatotoken"
  POTATO_SECRET = get from env variables
  POTATO_ID = get from env variables
  POTATO_TYPE = "authorization_code"
  POTATOCALLBACK_URL = "https://potatourl/potatoes/potatocallback"

  authorization_code = request.GET.get('code')

  payload = {
    'potato_type': POTATO_TYPE,
    'potato_id': POTATO_ID,
    'potato_secret': POTATO_SECRET,
    'potato_uri': POTATOCALLBACK_URL,
    'code': potato_code
  }

  r = requests.post(POTATO_OAUTH2_TOKEN_ENDPOINT, data=potatoload)

  resp = r.json()

  potatoAccess = {
    'id': resp['id'],
    'timestamp': resp['issued_at'],
    'instanceURL': resp['instance_url'],
    'signature': resp['signature'],
    'accessToken': resp['access_token']
  }

  request.session['potatoAccess_id'] = potatoAccess['id']
  request.session['potatoAccess_timestamp'] = potatoAccess['timestamp']
  request.session['potatoAccess_instanceURL'] = potatoAccess['instanceURL']
  request.session['potatoAccess_signature'] = potatoAccess['signature']
  request.session['potatoAccess_accessToken'] = potatoAccess['accessToken']

  return HttpResponse(t.render({}, request))
“我的视图”设置为执行回调,存储会话变量,如下所示:

MIDDLEWARE = [
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',

'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',


'wagtail.wagtailcore.middleware.SiteMiddleware',
'wagtail.wagtailredirects.middleware.RedirectMiddleware',
]
os.environ['CLIENT_SECRET'] = 'something'
os.environ['CLIENT_ID'] = 'something'
def potato_oauth_callback(request):


  POTATO_OAUTH2_TOKEN_ENDPOINT = "https://login.potato.com/potatoservices/potatooauth2/potatotoken"
  POTATO_SECRET = get from env variables
  POTATO_ID = get from env variables
  POTATO_TYPE = "authorization_code"
  POTATOCALLBACK_URL = "https://potatourl/potatoes/potatocallback"

  authorization_code = request.GET.get('code')

  payload = {
    'potato_type': POTATO_TYPE,
    'potato_id': POTATO_ID,
    'potato_secret': POTATO_SECRET,
    'potato_uri': POTATOCALLBACK_URL,
    'code': potato_code
  }

  r = requests.post(POTATO_OAUTH2_TOKEN_ENDPOINT, data=potatoload)

  resp = r.json()

  potatoAccess = {
    'id': resp['id'],
    'timestamp': resp['issued_at'],
    'instanceURL': resp['instance_url'],
    'signature': resp['signature'],
    'accessToken': resp['access_token']
  }

  request.session['potatoAccess_id'] = potatoAccess['id']
  request.session['potatoAccess_timestamp'] = potatoAccess['timestamp']
  request.session['potatoAccess_instanceURL'] = potatoAccess['instanceURL']
  request.session['potatoAccess_signature'] = potatoAccess['signature']
  request.session['potatoAccess_accessToken'] = potatoAccess['accessToken']

  return HttpResponse(t.render({}, request))
随后,当我请求重新检查会话变量时,我不断收到关键错误,无法检索它们:

def check_potatoes(request):
  c = {}
  c['potatoAccess_id'] = request.session['potatoAccess_id']
  print request.session['potatoAccess_id']
  return HttpResponse(json.dumps('potatoes'), content_type='application/json')

需要注意的是,当我进行初始回调时,我可以验证:

request.session['potatoAccess_id'] returns a value
potatoAccess['id'] returns a value
更改视图时(通过ajax调用的其他方法) 我得到这些关键错误,就好像这些值从未存在过一样

初学者犯了错误- 回调是使用隧道服务ngrok.io发送给不熟悉它的人的,(因此我实际上可以有一个安全的连接),会话的其余部分我只是在本地主机上执行,所以我的设置是正确的,我只是不在同一个会话中,因此我的变量不存在

我的“登录”是在, 然而,回调是在ngrok上进行的 “”

当会话变量从中可用时,我继续在本地主机上进行测试