Django实战(22):处理登录和注销
我们已经可以在view函数中判断用户是否已经登录以及获取用户信息:
if request.user.is_authenticated(): #判断用户是否已登录
user = request.user; #获取已登录的用户
else:
user = request.user; #非登录用户将返回AnonymousUser对象
Django的User对象提供了一系列的属性和方法,其中password存储的是加密后的密码,is_staff记录用户是否有管理员权限,其 他的属性可以参考官方文档。同时django.contrib.auth模块中提供了authenticate()、login()、logout()等 函数,分别实现认证、登录、登出等功能。
Django还为我们提供了内置的处理login、logout的view函数,但是因为其提供的行为与我们这里要的不一样,所以还需要自己实现view函数。
我们使用bootstrap模板设计的布局中,在菜单栏已经放入了登录表单,如下图:

如上一节所述,我们希望只有登录后的用户才可以管理产品,所以在右上角输入用户名和密码并登录后,该处显示用户名和”注销“按钮,而页面重定向的产品管理的界面。
。而注销后再恢复成登录表单。

需求已经明确了,现在开始实现。对于url配置,由于login和logout功能应该属于整个project,而不是特定的app,所以在depot/urls.py中配置:
from depotapp.views import login_view,logout_view
urlpatterns = patterns('',
... ...
(r'^accounts/login/$', login_view),
(r'^accounts/logout/$', logout_view),
)
而我们的设计的界面中没有独立的登录、注销界面,所以view函数还是在depotapp的views.py中实现:
from django.contrib.auth import authenticate,login,logout def login_view(request):
user = authenticate(username=request.POST['username'], password=request.POST['password'])
if user is not None:
login(request, user)
print request.user
return list_product(request)
else:
#验证失败,暂时不做处理
return store_view(request) def logout_view(request):
logout(request)
return store_view(request)
所有的界面都在base.html模板中,将base.html的topbar中原来登录表单的部分,改成如下的样子:
{% if request.user.is_authenticated %}
<div class="pull-right">
<a href=#>欢迎您:{{request.user}}</a>
<a class="btn danger small" href="{% url depotapp.views.logout_view %}">注销</a>
</div>
{% else %}
<form action="{% url depotapp.views.login_view %}" method='post' class="pull-right">
{% csrf_token %}
<input name='username' class="input-small" type="text" placeholder="用户名">
<input name='password' class="input-small" type="password" placeholder="密码">
<button class="btn" type="submit">登录</button>
</form>
{% endif %}
Django实战(22):处理登录和注销的更多相关文章
- Django实战(一)-----用户登录与注册系统6(session会话、注册视图)
因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的.独立的. 通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户.对于 ...
- Django 后台管理 之登录和注销
Session: session是服务器端生成保存的一个键值对 , session内部机制依赖于cookie . 用户登录后返回给客户端一个随机字符串,客户端带着随机字符串访问服务器,用于验证 ...
- Django实战(一)-----用户登录与注册系统3(前端页面、登录视图)
基本框架搭建好了后,我们就要开始丰富页面内容了.最起码,得有一个用户登录的表单不是么?(注册的事情我们先放一边.) 一. 原生HTML页面 删除原来的login.html文件中的内容,写入下面的代码: ...
- Django实战(一)-----用户登录与注册系统7(邮件确认)
通常而言,我们在用户注册成功,实际登陆之前,会发送一封电子邮件到对方的注册邮箱中,表示欢迎.进一步的还可能要求用户点击邮件中的链接,进行注册确认. 下面就让我们先看看如何在Django中发送邮件吧. ...
- Django实战(一)-----用户登录与注册系统5(图片验证码)
为了防止机器人频繁登录网站或者破坏分子恶意登录,很多用户登录和注册系统都提供了图形验证码功能. 验证码(CAPTCHA)是一种区分用户是计算机还是人的公共全自动程序. 可以防止恶意破解密码.刷票.论坛 ...
- Django实战(一)-----用户登录与注册系统4(表单)
我们前面都是手工在HTML文件中编写表单form元素,然后在views.py的视图函数中接收表单中的用户数据,再编写验证代码进行验证,最后使用ORM进行数据库的增删改查.这样费时费力,整个过程比较复杂 ...
- Django实战(一)-----用户登录与注册系统2(数据模型、admin后台、路由视图)
使用Django开发Web应用的过程中,很多人都是急急忙忙地写视图,写前端页面,把最根本的模型设计给忽略了. 模型中定义了数据如何在数据库内保存,再直白点说就是数据表的定义.这部分工作体现在Djang ...
- Django实战(一)-----用户登录与注册系统1(环境搭建)
一.背景 学了一段时间的语法,总感觉入不了门,所以找点小项目练练手,项目来自网络. 二.创建虚拟环境,并安装Django 使用Python中的virtualenv搭建一个mysite_env全新的环境 ...
- django用户登录和注销
django版本:1.4.21. 一.准备工作 1.新建项目和app [root@yl-web-test srv]# django-admin.py startproject lxysite [roo ...
随机推荐
- python---基础知识回顾(五)(python2.7和python3.5中的编码)
Unicode 和 UTF-8 有何区别? python基础之字符编码 以上两篇看懂即可,那下面的就不需要看了 python标准数据类型 Bytes python--数据类型bytes Python ...
- Python入门系列教程(三)列表和元组
增 1.insert A = ['] A.insert(0,0) print A 2.append A = ['] A.append(7) print A 3.extend A = ['] B = [ ...
- 高效使用jquery之一:请使用'On'函数
on函数是在jquery 1.7 加入的 描述: 在选定的元素上绑定一个或多个事件处理函数. 定义:.on( events [, selector ] [, data ], handler(event ...
- 【Foreign】Rectangle [KD-tree]
Rectangle Time Limit: 50 Sec Memory Limit: 512 MB Description Input Output Sample Input 0 4 2 0 2 1 ...
- spring boot获取前端参数四种方法
一:直接参数绑定 @RequestMapping("/hello") @ResponseBody public String hello(String para) { // par ...
- HDU 4521 小明系列问题——小明序列 (线段树 单点更新)
题目连接 Problem Description 大家都知道小明最喜欢研究跟序列有关的问题了,可是也就因为这样,小明几乎已经玩遍各种序列问题了.可怜的小明苦苦地在各大网站上寻找着新的序列问题,可是找来 ...
- 【FCS NOI2018】福建省冬摸鱼笔记 day1
省冬的第一天. 带了本子,笔,一本<算法导论>就去了.惊讶于为什么同学不带本子记笔记. 他们说:“都学过了.”,果然这才是巨神吧. 第一天:数论,讲师:zzx 前几页的课件挺水,瞎记了点笔 ...
- STL容器基本功能与分类
STL有7中容器. 分别为: vector 向量 <vector>(头文件) 随机访问容器.顺序容器 deque 双端队列 <deque> 随机访问容器.顺序容器 list ...
- Django 1.10中文文档-模型参考
模型字段 本文档包含了Django提供的全部模型 Field 包括 字段选项 和 字段类型 的API参考. 参见 如果内建的字段不能满足你的需求, 你可以蚕食 django-localflavor ( ...
- ubuntu git 简单入门【转】
转自:http://blog.chinaunix.net/uid-20718384-id-3334859.html 1. 安装 sudo apt-get install git-core 2. 初始 ...