python - 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数据库通信)
解决方案
推荐阅读
- r - R 时间序列函数 ts() 频率参数
- linkedin - 为域和子域安装一个 Insight Tag (LinkedIn Pixel) 是否正确?
- vue.js - Vue-CLI、.NET Core 3.1 Razor 页面和 HMR
- java - 开启 @GlobalMethodSecurity 时出现 Spring Boot 异常
- ios - iOS 上的电容器:POST 请求失败
- javascript - 在移动设备上隐藏 div 中的项目
- jquery - jquery上的if和else
- c - C 程序示例
- python - Matplotlib cmap 颜色的顺序不同
- c# - 使用 Key Vault 可以获得什么?