使用Google App Engine在Django Python中处理会话

1 投票
1 回答
620 浏览
提问于 2025-04-18 18:34

我现在正在使用Google App Engine来托管我的Django应用程序。我想在我的Django应用中实现会话功能。但是,由于Google App Engine不支持Django的默认会话处理,我无法使用它。

经过一些研究(基本上就是在网上查资料),我发现gae-sessions是推荐的库。我试着理解这个库提供的示例,但我还是搞不懂它是怎么工作的。请帮我写一些代码,用来设置和维护用户的会话变量。如果你知道其他文档更好的库来处理会话,我也很乐意使用,请告诉我。

1 个回答

3

gae-sessions 使用起来非常简单。你可以按照 GitHub 页面上的说明进行设置。我将通过一个实现登录页面的例子来详细说明如何使用。

假设在你的 views.py 文件中,你定义了一个函数,如下所示:

class loginForm(forms.Form):
    email = forms.CharField(label='Email')
    password = forms.CharField(widget=forms.PasswordInput(),label = "Password")

def login(request):
    if request.method == 'POST':
        form = loginForm(request.POST)
        if form.is_valid():
            entered_email = form.cleaned_data['email']
            entered_pass = form.cleaned_data['password']
            try:
                _user = user.objects.get(email=entered_email)
                stored_password = _user.password
                if stored_password == entered_pass:
                    session = get_current_session()
                    if session.is_active():
                        session.terminate()
                    session['email'] = entered_email
                    return  'REDIRECT AS REQUIRED'
                else:
                    print "INCORRECT PASSWORD"
                    form = loginForm()
                    return render(request, 'login.html',{ 'form': form })
            except:
                print "EMAIL NOT REGISTERED"
                form = loginForm()
                return render(request, 'login.html',{ 'form': form })
    else:
        form = loginForm()
        return render(request, 'login.html',{ 'form': form })

在上面的代码中,loginForm 用来定义用户输入登录信息的地方,也就是他们用来登录系统的凭证。login 方法用来检查用户输入的凭证是否和数据库中的匹配,如果匹配,就会使用 gae-sessions 创建一个会话。你需要在你的 views.py 文件中添加以下导入:

from gaesessions import get_current_session

在上面提到的 login 方法中,我们使用 get_current_session() 方法来访问会话,这个方法是从 gae-sessions 导入的。你可以根据需要设置会话的值。我设置了 session['email'] 来保持会话。要结束会话,只需使用 session.terminate() 就可以了。

确保按照 这里 提供的安装说明进行操作。希望你觉得这些信息有用!

撰写回答