浅谈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实现360的字符显示界面
Feb 21 Python
使用Python脚本将Bing的每日图片作为桌面的教程
May 04 Python
详解python字节码
Feb 07 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
Jan 14 Python
python函数map()和partial()的知识点总结
May 26 Python
python实现数字炸弹游戏
Jul 17 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 Python
Python带你从浅入深探究Tuple(基础篇)
May 15 Python
pytorch中[..., 0]的用法说明
May 20 Python
详解运行Python的神器Jupyter Notebook
Jun 03 Python
python工具dtreeviz决策树可视化和模型可解释性
Mar 03 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 smarty 二级分类代码和模版循环例子
2011/06/16 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
PHP设计模式之简单工厂和工厂模式实例分析
2019/03/25 PHP
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
Bootstrap基本组件学习笔记之列表组(11)
2016/12/07 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
Python生成随机密码的方法
2017/06/16 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
python+ffmpeg视频并发直播压力测试
2018/03/06 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
苹果香港官方商城:Apple香港
2016/09/14 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
美国小蜜蜂Burt’s Bees德国官网:天然唇部、皮肤和身体护理产品
2020/06/14 全球购物
英语教师求职信范文
2015/03/20 职场文书
运动会加油稿
2015/07/22 职场文书
java开发双人五子棋游戏
2022/05/06 Java/Android
使用Apache Camel表达REST服务的方法
2022/06/10 Servers