浅谈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 MysqlDb模块安装及其使用详解
Feb 23 Python
python爬虫爬取快手视频多线程下载功能
Feb 28 Python
高效使用Python字典的清单
Apr 04 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
在python tkinter中Canvas实现进度条显示的方法
Jun 14 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
关于Numpy数据类型对象(dtype)使用详解
Nov 27 Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 Python
keras自动编码器实现系列之卷积自动编码器操作
Jul 03 Python
Django实现微信小程序支付的示例代码
Sep 03 Python
详解解决jupyter不能使用pytorch的问题
Feb 18 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
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
js 通用订单代码
2013/12/23 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
Win8.1下安装Python3.6提示0x80240017错误的解决方法
2018/07/31 Python
python实现停车管理系统
2018/11/30 Python
简单了解Django ContentType内置组件
2019/07/23 Python
Python 分发包中添加额外文件的方法
2019/08/16 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
Python 如何展开嵌套的序列
2020/08/01 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
PHP面试题集
2016/12/18 面试题
银行纠风工作实施方案
2014/06/08 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
出纳工作检讨书范文
2014/12/27 职场文书
五一劳动节慰问信
2015/02/14 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
MySQL中连接查询和子查询的问题
2021/09/04 MySQL