1. 引言

这一讲我们要学习session,并开始接触模型(Model)。

session也就是会话,是为了在Web页面间交换数据而产生的,它保存在浏览器的cookie中。

在Django中使用session非常简单,只需要访问request对象的session属性,你可以把它当作一个字典来使用。

我们马上开始试验。给用户提供一个登录页面,上面有一个文本框用来输入用户名,还有一个提交按钮用来提交数据。当用户输入用户名,点击提交按钮后,就显示 用户已经登录,并且打印出用户输入的用户名,同时提供一个注销按钮。如果用户点击了注销按钮,就回到未登录的页面。未登录状态和登录状态是被记忆的,也就 是当你登录成功,并且没有注销时,你再次访问仍然显示的是登录成功的页面。当你没有登录或者注销后,你再次访问的就是未登录成功的页面。

2. 创建login.py文件

在newtest/目录下创建login.py文件,内容如下:

from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response

def login(request):
username = request.POST.get('username', None)
if username:
request.session['username'] = username
username = request.session.get('username', None)
if username:
return render_to_response('login.html', {'username':username})
else:
return render_to_response('login.html')

def logout(request):
try:
del request.session['username']
except KeyError:
pass
return HttpResponseRedirect('/login')

这里定义了两个View方法,login()和logout()。login()提供登录页面,处理用户提交的数据,判断用户是否登录。logout() 从session中删除用户名,将页面重新定向到登录页面。Django的模板支持条件判断,因此这里可以通过传入不同的字典来控制模板的生成。

login()的具体工作流程是这样的:

1) 从POST中取出username,POST中的数据是由HTML页面的表单(form)提供的。如果成功取得了username,就把它加入到 session中去(实际上就是操作session这个字典,如果username这个键不存在,就新建这个键值对,如果username这个键已存在, 就覆盖这个键值对)。

2) 从session中取出username。如果成功取得了username,就返回已登录的页面,如果没有取得username,就返回未登录的页面。这里调用不同页面就是通过往模板传入不同的字典来实现的。

logout()的工作流程更简单:尝试删除session,然后重定向到未登录页面。

3. 创建login.html文件

创建newtest/templates/login.html文件,内容如下:

{% if not username %}
<form method="post" action="/login/">
用户名:<input type="text" name="username" value=""><br/>
<input type="submit" value="登录">
</form>
{% else %}
{{ username }},您已经登录了!<br/>
<form method="post" action="/logout/">
<input type="submit" value="注销">
</form>
{% endif %}

Django模板中的if的用法和Python中相似,可以使用not, and, or。在这里,如果username不存在,则显示一个表单,显示用户名输入文本框和登录按钮。如果username存在,则显示用户名和注销按钮。

4. 修改urls.py

找到urlpatterns,修改为:

urlpatterns = patterns('',
(r'login/$', 'newtest.login.login'),
(r'logout/$', 'newtest.login.logout'),
)

5. 修改settings.py

Django的session需要使用数据库,Python 2.6中内置了sqlite3数据库,因此我们在这里直接使用sqlite3。sqlite3直接使用本地文件存储数据库,因此不存在服务器、端口、用户 名、密码、权限的配置问题,马上就可以开始使用,简单方便。

对newste/settings.py进行如下修改:

[quote]DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = './data.db'
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''

6. 初始化数据库

需要手动执行syncdb命令来完成数据库的初始化操作,包括创建数据库、数据表。命令如下:

$ ./manage.py syncdb

当出现是否要创建超级用户的提示时:

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no):

我们选择yes,然后创建一个用户名和密码都是test的超级用户。这个超级用户在以后会用到。

7. 在Web浏览器中测试

先启动Django内置的Web服务器,然后在你的浏览器中输入http://127.0.0.1:8000/login/。接下来测试一下登录和注销。

8. 小结

这一讲中,我们学习了Django中session的使用,尝试了模板(template)渲染(render)的另一种方式,并且初步接触了模型(model)。这些内容在网站开发中将会经常用到。

本文转自博客园知识天地的博客,原文链接:Django Step by Step 2010版(基于Django 1.1.1) 第五讲,如需转载请自行联系原博主。

Django Step by Step 2010版(基于Django 1.1.1) 第五讲相关推荐

  1. 基于Django+Layui的组件化基础开发平台

    项目介绍 一款 Python 语言基于Django.Layui.MySQL等框架精心打造的一款模块化.高性能.企业级的敏捷开发框架,本着简化开发.提升开发效率的初衷触发,框架自研了一套个性化的组件,实 ...

  2. 基于Django构建在线文本分类预测系统:SVM模型在线预测与部署 基于 Django 3.2 框架

    文章大纲 算法端与后端环境搭建 前端构建 Ajax XHR 创建网页与 Django项目 创建网页 前端 -- django 项目创建与启动 前端 -- 创建 django app 应用 postma ...

  3. Python版超市管理系统源代码,基于django+mysql

    Python版超市管理系统源代码,基于django+mysql 安装步骤 1.在mysql中创建名为demo_django_supermarket的数据库,修改config/setting.py中数据 ...

  4. 基于Django和翻译API实现web版的中英文对照翻译(一)

    笔者经常需要翻译一些英文文档,但是试用了一些商业软件之后,一来觉得满足不了自己的翻译习惯,二来也是觉得对于个人来说,使用需要的收费的东西总是会有些顾忌. 一番了解之后,决定选用搜狗翻译/有道翻译官方提 ...

  5. 基于django和vue的xdh官网设计

    前言 本项目是使用三段分离的设计 前台 使用materialize框架搭建的前台页面,后端使用的django写的接口 后台 使用Amazon UI 模板搭建的界面,管理各个部分的内容 项目环境 pyt ...

  6. Step by Step演示如何训练Pytorch版的EfficientDet

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx Paper:https://arxiv.org/abs/1911.09070 Base Git ...

  7. 基于django的轻量级CMS Mezzanine搭建笔记

    0x00 什么是Mezzanine 它是一个基于django的内容管理平台(content management platform),组成简单,可扩展性和定制性强,特别适合小型的个人博客系统.它也提供 ...

  8. Pycharm社区版运行Django的三种方法(Pycharm添加配置参数快捷启动Django、Pycharm社区版Django项目创建)

    目录 Pycharm社区版运行Django的三种方法 Django安装和环境变量的配置(MacOS) 创建Project 启动Django Webserver 方法一:终端启动 方法二:pycharm ...

  9. [2018-03-06] 基于Django的轻量级CMS Mezzanine搭建笔记

    [2018-03-06] 基于Django的轻量级CMS Mezzanine搭建笔记 一丶什么是Mezzanine? 它是基于django的内容管理平台(),组成简单,可扩展性和定制性强,特别是个小型 ...

  10. 基于Django实现Linux运维管理平台的整个实现过程和各种API接口调用以及Echarts绘图项目介绍(一)记录点滴生活

    基于Django实现Linux运维管理平台整个实现过程和各种API接口调用以及Echarts绘图的使用介绍 项目内容涉及技术直通车: 我的项目仓库:MyGitHub https://github.co ...

最新文章

  1. 使用 Navicat Lite 连接 Oracle 数据库
  2. android:clipToPadding和android:clipChildren
  3. 【BZOJ3821/UOJ46】玄学(二进制分组,线段树)
  4. 「CF 932E」 Team Work
  5. STM32工作笔记001---认识开发板资源-以正点原子战舰版开发板为例
  6. pypi的embeddings包踩坑
  7. Ubuntu替换pip源
  8. Illustrator 教程,如何在 Illustrator 中重新着色图稿?
  9. App开发国内常用的应用市场
  10. 【开源电机驱动】如何计算电机参数
  11. 2013.12.26 M-Learning
  12. Spring IOC(一):概述
  13. pdf做成翻页电子书_想看书就别用手机了,电子书选购指南
  14. 南大通用GBase XDM支持的操作平台
  15. ATM机程序Linux,c语言模拟银行ATM机程序
  16. 【K-S检验】检验两个数据集的分布是否一致
  17. 便签提醒事项怎么设置闹钟
  18. linux资源查看命令详解大全[top|vmstat|free]
  19. MongoDB 分片总结
  20. 秋招寒冬不如换个思维——试试中小厂

热门文章

  1. win7 任务计划 任务映像已损坏或篡改(异常来自HRESULT:0x80041321)
  2. 105 基于socketserver实现并发的socket编程
  3. 【代码规范】Google C++开源风格指南
  4. 架构之美阅读笔记06
  5. [tips]ubuntu 12.04系统黑屏
  6. 如何让Div层悬浮在Flash Object对象之上(转载)
  7. 总结ASP操作文件夹和文件
  8. liunx 之 redHat 下 java 环境的配置和安装
  9. 学会使用Trace和Debug
  10. linux 反汇编运行时代码段,linux内核学习之一 简单c语言反汇编(示例代码)