浅谈django中的认证与登录


Posted in Python onOctober 31, 2016

认证登录

django.contrib.auth中提供了许多方法,这里主要介绍其中的三个:

1  authenticate(**credentials)    提供了用户认证,即验证用户名以及密码是否正确

一般需要username  password两个关键字参数

如果认证信息有效,会返回一个  User  对象。authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是需要的。当我们试图登陆一个从数据库中直接取出来不经过authenticate()的User对象会报错的!!

user = authentica(username='someone',password='somepassword')

2  login(HttpRequest, user, backend=None)

该函数接受一个HttpRequest对象,以及一个认证了的User对象

此函数使用django的session框架给某个已认证的用户附加上session id等信息。

from django.contrib.auth import authenticate, login

def my_view(request):
  username = request.POST['username']
  password = request.POST['password']
  user = authenticate(username=username, password=password)
  if user is not None:
    login(request, user)
    # Redirect to a success page.
    ...
  else:
    # Return an 'invalid login' error message.
    ...

3  logout(request)     注销用户

from django.contrib.auth import logout

def logout_view(request):
  logout(request)
  # Redirect to a success page.

该函数接受一个HttpRequest对象,无返回值。

当调用该函数时,当前请求的session信息会全部清除

该用户即使没有登录,使用该函数也不会报错
 
只允许登录的用户访问

如果希望:

1  用户登陆后才能访问某些页面,

2  如果用户没有登录就访问该页面的话直接跳到登录页面

3  用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址

我们有几个方法来实现:

1  糙活

检测request.user.is_authenticated()

from django.conf import settings
from django.shortcuts import redirect

def my_view(request):
  if not request.user.is_authenticated():
    return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

2  django中的login_required函数

django已经为我们设计好了一个用于此种情况的装饰器:login_requierd()

from django.contrib.auth.decorators import login_required 
   
@login_required 
def my_view(request): 
  ...

在运行my_view函数前需要进行登录验证。

1  若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' (这个值可以在settings文件中通过LOGIN_URL进行修改)。并传递  当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。

可以使用  login_url  参数来配置 登录url 。

可以使用redirect_field_name参数配置 当前访问url的绝对路径 。

如果要使用django的默认登陆界面,则可以通过在urls.py中如此配置,这样的话,如果未登录,程序会默认跳转到

“templates\registration\login.html”这个模板。

#urls.py
...
(r'^accounts/login/$', 'django.contrib.auth.views.login'),

2  如果用户登陆了,则会进入正常的页面

以上就是小编为大家带来的浅谈django中的认证与登录全部内容了,希望大家多多支持三水点靠木~

Python 相关文章推荐
简单介绍Python中的JSON使用
Apr 28 Python
Python字符串替换实例分析
May 11 Python
Python闭包的两个注意事项(推荐)
Mar 20 Python
python交互式图形编程实例(三)
Nov 17 Python
Python自定义线程类简单示例
Mar 23 Python
python2 与 python3 实现共存的方法
Jul 12 Python
Python 忽略warning的输出方法
Oct 18 Python
Python元组常见操作示例
Feb 19 Python
Python进阶之迭代器与迭代器切片教程
Jan 29 Python
Python爬虫HTPP请求方法有哪些
Jun 03 Python
Python用access判断文件是否被占用的实例方法
Dec 17 Python
一篇文章带你搞懂Python类的相关知识
May 20 Python
python 把数据 json格式输出的实例代码
Oct 31 #Python
python中json格式数据输出的简单实现方法
Oct 31 #Python
python并发编程之多进程、多线程、异步和协程详解
Oct 28 #Python
微信 用脚本查看是否被微信好友删除
Oct 28 #Python
使用Python将数组的元素导出到变量中(unpacking)
Oct 27 #Python
Python中断言Assertion的一些改进方案
Oct 27 #Python
利用Python实现颜色色值转换的小工具
Oct 27 #Python
You might like
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
php测试kafka项目示例
2020/02/06 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
jQuery中读取json文件示例代码
2013/05/10 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
jQuery stop()用法实例详解
2016/07/28 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
纯js实现隔行变色效果
2017/11/29 Javascript
javascript头像上传代码实例
2019/09/28 Javascript
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
Python聚类算法之DBSACN实例分析
2015/11/20 Python
人机交互程序 python实现人机对话
2017/11/14 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
PyQt5实现简易电子词典
2019/06/25 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
Python集合操作方法详解
2020/02/09 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
这段代码难道不该打印出56吗
2013/02/27 面试题
会计出纳员的自我评价
2014/01/15 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
简历自我评价优缺点
2015/03/11 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
JS如何实现基于websocket的多端桥接平台
2021/05/14 Javascript
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL