www.lyjust.netDjangoSession会话

算法 ww9992019com 发表于 1 周前

www.lyjust.net开户请拨18288069766许昕遭遇灵魂翻译青岛城阳区7oXG2n<div style="width:100%;float:left;" class="article-content">

                <input type="hidden" name="article_id" id="article_id" value="8310">
                <input type="hidden" name="catid" id="catid" value="0">

                <div>

<div>

    如前所述,我们可以在Web应用程序客户端使用Cookie来存储大量的有用数据。 我们在此之前已经看到了可以使用客户端的cookie存储各种数据,在Web应用程序这是非常有用的。这就导致了很多要保存数据的重要性和一些安全漏洞问题。

</div>

</div>

<div>

<p>

    出于安全原因,Django有一个会话框架来处理Cookies。 会话用于抽象的接收和发送cookie,数据保存在服务器端(如数据库),而客户端的cookie只是有识别会话ID。会话也有助于避免在用户浏览器设置为“不接受”cookies行为。

</p>

<h2>

    <div>

        设置会话

    </div>

</h2>

<p>

    在Django中,使会话在项目 settings.py 完成,通过添加一些行到MIDDLEWARE_CLASSES和INSTALLED_APPS选项。这应该在创建项目完成,但它总是很容易知道,所以MIDDLEWARE_CLASSES应该类似如下 −

</p>

<pre>'django.contrib.sessions.middleware.SessionMiddleware'
</pre>

<div>

    INSTALLED_APPS应该有 -

</div>

<pre>'django.contrib.sessions' </pre>

<p>

    默认情况下,Django在数据库保存会话信息(表django_session中或集合),但可以用其他的方式类似配置的引擎存储的信息:在文件中或在缓存中。

</p>

<div>

    当会话启用,每个请求(在Django任何针对第一个参数)有一个会话(字典)属性。

</div>

<p>

    让我们创建一个简单的示例,看看如何创建和保存会话。我们之前已经建立了一个简单的登录系统(见Django的表单处理的章节和Django的Cookies处理一章)。让我们保存用户名在cookie。因此如果不注销,访问我们的登录页面时,你不会看到登录表单。 在Django通过保存Cookie在服务器端,使用cookies处理更加安全。

</p>

<div>

    对于这一点,首先让我们改变登录代码以保存username 在服务器端-

</div>

<pre>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}
</pre>

<div>

    那么让我们来创建视图对应登录表单的视图,如果cookie设置将不会显示表单 -

</div>

<pre>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', {}) </pre>

<p>

    现在,让我们修改url.py文件并更改URL,因此配对新视图 −

</p>

<pre>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')) </pre>

<p>

    当访问 /myapp/connection,将能看到如下页面−<br>

<img src="/uploads/tutorial/20160130/1-160130224F92R.jpg" alt="">

</p>



<div>

    你会被重定向到下面的页面 -<br>

<img src="/uploads/tutorial/20160130/1-160130224HYH.jpg" alt=""><br>

</div>



<div>

    现在,如果您尝试再次访问/myapp/connection,它会直接重定向到第二个屏幕。

</div>

<div>

    让我们创建一个简单的注销视图,用于清除Cookie。

</div>

<pre>def logout(request):

try:

  del request.session['username']

except:

  pass

return HttpResponse("&lt;strong&gt;You are logged out.&lt;/strong&gt;")
</pre>

<div>

    并在 myapp/url.py 中配对 URL 注销

</div>

<pre>url(r'^logout/', 'logout', name = 'logout'),
</pre>

<div>

    现在,如果访问/myapp/logout,将得到如下页面-<br>

<img src="/uploads/tutorial/20160130/1-160130224KBT.jpg" alt=""><br>

</div>



<div>

    如果再次访问 /myapp/connection ,将会得到的登录表单(屏幕1)。

</div>

<h3>

    <div>

        可能使用会话的一些动作

    </div>

</h3>

<p>

    我们已经看到如何存储和访问会话,下面是一个很好的了解请求的会话属性还有其他一些有用的操作,如 -

</p>

<ul>

    <li>

        <p>

            <strong>set_expiry (</strong><strong>value</strong><strong>)</strong> − 设置会话的过期时间

        </p>

    </li>

    <li>

        <p>

            <strong>get_expiry_age()</strong> − 返回直到会话过期的秒数

        </p>

    </li>

    <li>

        <p>

            <strong>get_expiry_date()</strong> − 返回本会话将到期的日期

        </p>

    </li>

    <li>

        <p>

            <strong>clear_expired()</strong> − 从会话中删除过期的会话存储

        </p>

    </li>

    <li>

        <p>

            <strong>get_expire_at_browser_close()</strong><strong> </strong>− 返回true或false,具体取决于用户的会话cookie是否已过期在用户的Web浏览器关闭时

        </p>

    </li>

</ul>

</div>

                <br>
                <p style="text-align:center;float:left;width:100%;margin-top:24px;margin-bottom:18px;">
                        <button class="layui-btn layui-btn-danger" id="btn-reward"> ¥ 我要打赏 </button>  
                        <button class="layui-btn" id="article-perfect">
                            <i class="layui-icon layui-icon-edit"></i>教程纠错
                        </button>
                        <button class="layui-btn layui-btn-normal" id="action-collection">
                            <i class="layui-icon layui-icon-rate"></i>收藏
                        </button>
                </p>



                <div style="width:100%;margin-bottom: 16px; height: 32px;margin-top:18px;float:left;">

                    <span style="float:left;">上一篇:<a href="http://f2e.im/u/ww9992019com" title="Django Cookies处理"><i class="layui-icon"></i>
                            Django Cookies处理</a></span>
                                            <span style="float:right;">下一篇:<a href="http://f2e.im/u/ww9992019com" style="float:right;" title="下一篇:Django缓存"><i class="layui-icon"></i>
                            Django缓存</a></span>
                                            <div id="googlead" style="float:left;margin-top:8px;">
                        <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
                        <!-- yiibai下方 -->
                        <ins class="adsbygoogle" style="display:inline-block;width:728px;height:90px" data-ad-client="ca-pub-1090193214637198" data-ad-slot="6494738921"></ins>
                        <script>
                            (adsbygoogle = window.adsbygoogle || []).push({});
                        </script>
                    </div>
                </div>

                <div style="width:100%;margin-top:18px;float:left;">


            </div>
暂无回复,说出你的观点吧
登录后即可参与回复