浅谈django中的认证与登录

作者:jingxian 时间:2023-02-22 18:18:03 

认证登录

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,登录,认证
0
投稿

猜你喜欢

  • 关于 Flash Banner 设计的建议

    2010-02-02 18:19:00
  • Python3+django2.0+apache2+ubuntu14部署网站上线的方法

    2023-01-12 23:14:33
  • tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法

    2021-08-11 11:43:55
  • Python科学计算之Pandas详解

    2023-07-21 19:12:51
  • 使用pandas库对csv文件进行筛选保存

    2022-12-25 04:55:10
  • JavaScript 中的 Base64 编码(一):Encode

    2010-07-23 10:16:00
  • Python的Flask项目中获取请求用户IP地址 addr问题

    2021-09-08 08:38:47
  • 如何使用Python抓取网页tag操作

    2023-11-11 12:15:24
  • Python+matplotlib实现绘制等高线图示例详解

    2022-09-18 05:44:11
  • js实现滑动进度条效果

    2023-08-24 03:47:39
  • django基于restframework的CBV封装详解

    2021-09-25 20:25:25
  • 解决python2.7 查询mysql时出现中文乱码

    2024-01-14 18:34:57
  • 在Mysql上创建数据表实例代码

    2024-01-22 17:40:39
  • Python 绘制酷炫的三维图步骤详解

    2022-08-28 21:07:08
  • 基于Python实现体育彩票选号器功能代码实例

    2021-06-15 17:48:54
  • 用户凭什么跟你注册?

    2011-06-10 13:16:00
  • HTML编写小经验

    2011-06-14 09:43:14
  • python动态文本进度条的实例代码

    2021-11-15 02:11:50
  • 深度学习TextRNN的tensorflow1.14实现示例

    2023-12-31 18:59:23
  • 通过Python实现电脑定时关机的两种方法

    2023-05-09 03:23:50
  • asp之家 网络编程 m.aspxhome.com