首页 > 解决方案 > django 会话数据未保存

问题描述

对我在做什么的一点解释:我有一个简单的电报机器人,它向用户发送一个链接,该链接是一个 twitch 登录页面,用于验证用户并允许我做一些 twitch 事情。更多详细信息,用户单击链接,进行 twitch 登录,然后重定向到 mysite.com/verify 进行所有 oidc 身份验证的地方,然后如果一切正确,我想添加用户的 twitch id 和电报 id到外部数据库。

视图.py

@csrf_exempt
def telegramBot(request): #function to handle telegram webhook
    print("telegramBot request.session", request.session) 

    for key, value in request.session.items(): #printing all value in session
        print('{} => {}'.format(key, value))

    request.session['telegramid'] = "12345"    #trying to add data
 
    for key, value in request.session.items(): #checking if there is the new value
        print('{} => {}'.format(key, value))   #here it correctly prints telegramid => 12345

    request.session.modified = True

    if request.method == 'POST':
        [code to handle telegram messages]
        return HttpResponse(status=200)
    else:
        return HttpResponse('get',status=200)

#mysite.it/verify/
#the user is redirected here after login with twitch
def verify(request):
    print("verify request.session", request.session)

    for key, value in request.session.items(): #PROBLEM! It prints nothing,
        print('{} => {}'.format(key, value))   #where is the telegram id previously set? 
                                              
    request.session['twitchid'] = "twitchid"   #trying to add a new value

    for key, value in request.session.items():
        print('{} => {}'.format(key, value))   #correctly prints twitch id and nothing else

    [code to do the oidc authentification]

    externalDatabase.insert(telegramID,twitchID) #adding data to database, pseudocode
    
    return HttpResponse("<h2>You can go back to the telegram bot</h2>")

设置.py

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

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',
]
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

当我打印“request.session”时,我在两个函数中看到类似:认为它是正确的。但是为什么当我尝试打印该会话的值时(从另一个视图)它什么也没打印?我想我写了所有必要的东西,但如果您需要其他信息,请告诉我。谢谢

PS:不知道它是否相关或者它只是会混淆,无论如何:我开始在本地工作这个 django 应用程序(settings.py 中的 DATABASES 设置为连接到 mongo db 数据库),现在我将它托管在 pythonanywhere并将settings.py中的DATABASES值设置回默认值(现在我通过pymongo与那个mongodb数据库通信)

标签: pythondjangodatabasesessiontelegram

解决方案


推荐阅读