zoukankan      html  css  js  c++  java
  • django视图002

    Cookie 和 Session

    接下来继续另外一个有意思的话题,在不考虑数据库验证的情况下,假如用户通过“zhangsan”登录, 然后,在登录成功页显示“嘿,zhangsan 你好!”,这是一般系统都会提供的一个小功能,接下来我们将分别 通过 Cookie 和 Session 来实现它。

    Cookie 与 Session

    Cookie 机制:正统的 Cookie 分发是通过扩展 HTTP 协议来实现的,服务器通过在 HTTP 的响应头中加上 一行特殊的指示以提示浏览器按照指示生成相应的 Cookie。然而纯粹的客户端脚本如 JavaScript 或者 VBScript也可以生成 Cookie。而 Cookie 的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所 有存储的 Cookie,如果某个 Cookie 所声明的作用范围大于等于将要请求的资源所在的位置,则把该 cookie 附 在请求资源的 HTTP 请求头上发送给服务器。

    Session 机制:Session 机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是 使用散列表)来保存信息。

    3.2.1、Cookie 的使用继续修改.../sign/views.py 文件:

    ......
    # 登录动作
    def login_action(request):

    if request.method == 'POST':
    username = request.POST.get('username', '') password = request.POST.get('password', '')
    if username == 'admin' and password == 'admin123':

    response = HttpResponseRedirect('/event_manage/') response.set_cookie('user', username, 3600) # 添加浏览器 cookie return response

    else:
    return render(request,'index.html', {'error': 'username or password

    error!'})

    # 发布会管理
    def event_manage(request):

    虫师原创----http://fnng.cnblogs.com

    page51image1756352

    51

    page52image1650656

    虫师原创----http://fnng.cnblogs.comusername = request.COOKIES.get('user', '') # 读取浏览器 cookie

    return render(request,"event_manage.html",{"user":username})

    当用户登录成功后,在跳转到 event_manage 页面时,通过 set_cookie()方法来添加浏览器 Cookie。

    这里给 set_cookie()方法传了三个参数,第一个参数“user”是用于表示写入浏览器的 Cookie 名,第二个 参数 username 是由用户在登录页上输入的用户名,第三个参数 3600 用于表示该 cookie 信息在浏览器中的停 留时间,默认以秒为单位。

    而在 event_manage 视图函数中,通过 request.COOKIES 来读取 Cookie 名为“user”的值。并且通过 render将和 event_manage.html 页面一起返回给客户端浏览器。

    修改.../templates/event_manage.html 页面,添加<div>标签来显示用户登录的用户名。......

    <div style="float:right;"> <a>嘿!{{ user }} 欢迎</a><hr/>

    ...... </div>重新再来登录一次,将会看到页面如图 3.6。

    page52image1662096page52image1764640page52image1660224page52image1775168

    图 3.6 登录页显示 Cookie 里用户名

    page52image1771584

    图 3.7 通过 Firebug 查看浏览 Cookie 信息

    52

    page53image1685600

     Session 的使用

    Cookie 固然好,但存在一定的安全隐患。Cookie 像我们以前用的存折,用户的存钱、取钱都会记录在这 张存折上(即浏览器中会保存所有用户信息),那么对于有非分想法的人可能会去修改存折上的数据(这个 比喻忽略掉银行同样会记录用户存取款的金额)。

    相对于存折,银行卡要安全的得多,客户拿到的只是一个银行卡号(即浏览器只保留一个 Sessionid), 那么用户的存钱、取钱都会记录在银行的系统里(即服务器端),只得到一个 sessionid 是没有任何意义的, 所以相对于 Cookie 来说就会安全很多。

    在 Django 中使用 Session 和 Cookie 类似。我们只用将 Cookie 的几步操作替换成 session 即可。 修改.../sign/views.py 文件,在 login_action 函数中,将:

    response.set_cookie('user', username, 3600)

    替换为:
    request.session['user'] = username # 将 session 信息记录到浏览器

    在 event_manage 函数中,将:
    username = request.COOKIES.get('user', '')
    替换为:
    username = request.session.get('user', '') # 读取浏览器 session再次尝试登录,不出意外的话将会得到一个错误。
    “no such table: django_session”

    这个错误跟 Session 的机制有关,既然要服务器端记录用户的数据,那么一定要有地方来存放用户Sessionid 对应的信息才对。所以,我们需要创建 django_session 表。别着急!Django 已经帮我们准备好这些常 用的表,只需要将他们生成即可,是不是很贴心。

    进行数据迁移  输入命令: python3 manage.py migrate

    在 guest 项目的根目录下会生成一个 db.sqlite3 文件

    这个里面应该存放的就是数据

    但是不知道为什么我的这个文件居然是乱码的,算了先不解决了 网下看看是否跑的通

  • 相关阅读:
    脏矩形(高效绘图 13.3)
    矢量图形(高效绘图 13.2)
    软件绘图(高效绘图 13.1)
    Instruments(性能调优 12.3)
    测量,而不是猜测(性能调优 12.2)
    CPU VS GPU(性能调优 12.1)
    物理模拟(基于定时器的动画 11.2)
    RHEL Server 6.3下MySQL5.5.25a源码安装
    Linux rpm 命令参数使用详解
    db2 用户权限
  • 原文地址:https://www.cnblogs.com/lhdcg/p/9942505.html
Copyright © 2011-2022 走看看