【问题标题】:Create a Session in Django在 Django 中创建会话
【发布时间】:2010-02-19 00:28:05
【问题描述】:

到目前为止,Django 的文档太技术性了。如何创建会话并在其中存储变量或从中获取变量?我是 Django 框架的新手,因此文档太技术性了。会议是我的“最后一步”。

【问题讨论】:

    标签: django session


    【解决方案1】:

    假设您想要基于数据库的会话(Django 还提供基于文件的会话和基于缓存的会话):

    1. 打开settings.py,找到MIDDLEWARE_CLASSES。将'django.contrib.sessions.middleware.SessionMiddleware' 添加到列表中。
    2. 在同一文件中找到INSTALLED_APPS,并在其中添加'django.contrib.sessions'
    3. 从命令行运行manage.py syncdb

    初始设置后,您可以在视图中使用request.session 来存储请求之间的信息。

    例如这将存储信息:

    request.session['name'] = 'Ludwik'
    

    您可以轻松检索它:

    print request.session['name']
    

    if request.session['name'] == 'Ludwik':
       print 'you are awesome!'
    

    有关您可以使用request.session 对象执行的其他操作,请参阅the documentation

    【讨论】:

      【解决方案2】:

      MIDDLEWARE_CLASSES 应该有 -

      'django.contrib.sessions.middleware.SessionMiddleware'
      

      INSTALLED_APPS 应该有 -

      'django.contrib.sessions'
      

      更改我们的登录视图以保存我们的用户名 cookie 服务器端 -

      def login(request):
        username = 'not logged in'
      
        if request.method == 'POST':
          MyLoginForm = LoginForm(request.POST)
      
          if MyLoginForm.is_valid():
             username = MyLoginForm.cleaned_data['username']
             request.session['username'] = username
          else:
              MyLoginForm = LoginForm()
      
        return render(request, 'loggedin.html', {"username" : username}
      

      为登录表单创建 formView 视图,如果设置了 cookie,我们将不会显示该表单 -

      def formView(request):
         if request.session.has_key('username'):
            username = request.session['username']
            return render(request, 'loggedin.html', {"username" : username})
         else:
            return render(request, 'login.html', {})
      

      更改 url.py 文件以更改 url,使其与我们的新视图配对 -

      from django.conf.urls import patterns, url
      from django.views.generic import TemplateView
      
      urlpatterns = patterns('myapp.views',
         url(r'^connection/','formView', name = 'loginform'),
         url(r'^login/', 'login', name = 'login'))
         url(r'^logout/', 'logout', name = 'logout'),
      

      创建一个简单的注销视图来清除我们的 cookie。

      def logout(request):
         try:
            del request.session['username']
         except:
            pass
         return HttpResponse("<strong>You are logged out.</strong>")
      

      【讨论】:

        猜你喜欢
        • 2018-09-10
        • 1970-01-01
        • 2011-05-02
        • 2018-08-20
        • 1970-01-01
        • 2012-06-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多