django 使用session

setting.py
在 INSTALLED_APPS 中加入 online。
在 MIDDLEWARE_CLASSES 中注释掉 'django.middleware.csrf.CsrfViewMiddleware'。
设置数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test_session',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '',
'PORT': '3306',
}
}
模版路径:
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'test_sessin/online/templates'),
)

urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
import online

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^login/$', 'online.views.login'),
    url(r'^index/$', 'online.views.index'),
    url(r'^logout/$', 'online.views.logout'),
)

同步数据库:
python manager.py migrate
然后会在数据库中看到表:django_session。

online/views.py
#coding=utf-8
from django.shortcuts import render
from django.shortcuts import render,render_to_response
from django.http import HttpResponse,HttpResponseRedirect
from django import forms


class UserForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField()

#用户登录
def login(req):
    if req.method == "POST":
        uf = UserForm(req.POST)
        if uf.is_valid():
            username = uf.cleaned_data['username']
            password = uf.cleaned_data['password']
            #把获取表单的用户名传递给session对象
            req.session['username'] = username
            req.session['password'] = password

            return HttpResponseRedirect('/index/')
    else:
        uf = UserForm()
    return render_to_response('login.html',{'uf':uf})

#登录之后跳转页
def index(req):
    username = req.session.get('username','anybody')
    password = req.session.get('password','')

    return render_to_response('index.html',{'username':username})

#注销动作
def logout(req):
    del req.session['username'] #删除session
    del req.session['password']
    return HttpResponse('logout ok!')


模版:
login.html
<form method = 'post'>
{{uf.as_p}}
<input type="submit" value = "ok"/>
</form>
index.html
<div>
   <h1>welcome {{username}}</h1>
   <a href="/logout">logout</a>
</div>

运行:
python manger.py runserver 0.0.0.0:8001

访问登录:

登录后,在浏览器的cookies中会有 session id:

在后台数据库的django_session表中可以看到session的记录:
解析 session_data 可以看到登录的用户名/密码
>>> import base64
>>> base64.b64decode('NWY4YmYzYjk3YWJiNzY0YzYxM2NlODVhZDJjZTg3MTc0ZTMyMTg2Mzp7InVzZXJuYW1lIjoidXNlciIsInBhc3N3b3JkIjoicHdkIn0=')
'5f8bf3b97abb764c613ce85ad2ce87174e321863:{"username":"user","password":"pwd"}'

session 是用户登录的用户名/密码 保存在服务器端的数据库中,
而客户端(浏览器)产生的只是一个session id ,
程序通过读取客户端的session id 来查找对应的用户名/密码。

点击 logout
再访问 index:
此时是 anybody,没有登录的用户。因为后台在访问 logout 的时候删除了 session_data中的用户信息
解析 session_data 可以发现用户名/密码已删除
>>> base64.b64decode('YmQ0ZjdkNzc0NGI0YWI2MDRmMTQ4OGM4MzhiZmI5YzUyYWYwNWFmNjp7fQ==')
'bd4f7d7744b4ab604f1488c838bfb9c52af05af6:{}'

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值