浅谈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的pyxmpp2中的主循环使其提高性能
Apr 24 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
Jun 07 Python
python中 logging的使用详解
Oct 25 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
Python用for循环实现九九乘法表
May 31 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
使用python对文件中的数值进行累加的实例
Nov 28 Python
Python实现将HTML转成PDF的方法分析
May 04 Python
深入浅析Python 中 is 语法带来的误解
May 07 Python
pygame实现俄罗斯方块游戏(对战篇1)
Oct 29 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
Dec 13 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
Feb 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
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
2014/08/08 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
2013/08/28 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
jQuery常用且重要方法汇总
2015/07/13 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
jQuery实现的鼠标滚轮控制图片缩放功能实例
2017/10/14 jQuery
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
Vue 实时监听窗口变化 windowresize的两种方法
2018/11/06 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
javaScript实现一个队列的方法
2020/07/14 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
Django基础之Model操作步骤(介绍)
2017/05/27 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
python二元表达式用法
2019/12/04 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
python开发入门——列表生成式
2020/09/03 Python
怀念母亲教学反思
2014/04/28 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
优秀教师申报材料
2014/12/16 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript
MySQL数据库 安全管理
2022/05/06 MySQL