浅谈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 数据加密代码
Dec 24 Python
python 解析html之BeautifulSoup
Jul 07 Python
如何使用python把ppt转换成pdf
Jun 29 Python
利用Python检测URL状态
Jul 31 Python
PIL对上传到Django的图片进行处理并保存的实例
Aug 07 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
Nov 08 Python
通过python扫描二维码/条形码并打印数据
Nov 14 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
Apr 16 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
Jul 09 Python
Python如何设置指定窗口为前台活动窗口
Aug 12 Python
如何快速理解python的垃圾回收机制
Sep 01 Python
python Gabor滤波器讲解
Oct 26 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
PHP写MySQL数据 实现代码
2009/06/15 PHP
让php处理图片变得简单 基于gb库的图片处理类附实例代码下载
2011/05/17 PHP
php 批量替换html标签的实例代码
2013/11/26 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
2016/09/22 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
jQuery性能优化28条建议你值得借鉴
2013/02/16 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
[01:03:37]Secret vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[49:07]VGJ.T vs Optic Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
Python入门必须知道的11个知识点
2018/03/21 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
jupyter notebook实现显示行号
2020/04/13 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
python利用opencv实现颜色检测
2021/02/23 Python
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
外贸英语毕业生自荐信
2013/11/14 职场文书
教师暑期培训感言
2014/08/15 职场文书
学位证书委托书
2014/09/30 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
酒店开业主持词
2015/07/02 职场文书
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL