当前位置: 首页 > 编程笔记 >

详解Django框架中用户的登录和退出的实现

颛孙嘉玉
2023-03-14
本文向大家介绍详解Django框架中用户的登录和退出的实现,包括了详解Django框架中用户的登录和退出的实现的使用技巧和注意事项,需要的朋友参考一下


Django 提供内置的视图(view)函数用于处理登录和退出 (以及其他奇技淫巧),但在开始前,我们来看看如何手工登录和退出。 Django提供两个函数来执行django.contrib.auth\中的动作 : authenticate()和login()。

认证给出的用户名和密码,使用 authenticate() 函数。它接受两个参数,用户名 username 和 密码 password ,并在密码对给出的用户名合法的情况下返回一个 User 对象。 如果密码不合法,authenticate()返回None。

>>> from django.contrib import auth
>>> user = auth.authenticate(username='john', password='secret')
>>> if user is not None:
...   print "Correct!"
... else:
...   print "Invalid password."

authenticate() 只是验证一个用户的证书而已。 而要登录一个用户,使用 login() 。该函数接受一个 HttpRequest 对象和一个 User 对象作为参数并使用Django的会话( session )框架把用户的ID保存在该会话中。

下面的例子演示了如何在一个视图中同时使用 authenticate() 和 login() 函数:

from html" target="_blank">django.contrib import auth

def login_view(request):
  username = request.POST.get('username', '')
  password = request.POST.get('password', '')
  user = auth.authenticate(username=username, password=password)
  if user is not None and user.is_active:
    # Correct password, and the user is marked "active"
    auth.login(request, user)
    # Redirect to a success page.
    return HttpResponseRedirect("/account/loggedin/")
  else:
    # Show an error page
    return HttpResponseRedirect("/account/invalid/")

注销一个用户,在你的视图中使用 django.contrib.auth.logout() 。 它接受一个HttpRequest对象并且没有返回值。

from django.contrib import auth

def logout_view(request):
  auth.logout(request)
  # Redirect to a success page.
  return HttpResponseRedirect("/account/loggedout/")

注意,即使用户没有登录, logout() 也不会抛出任何异常。

在实际中,你一般不需要自己写登录/登出的函数;认证系统提供了一系例视图用来处理登录和登出。 使用认证视图的第一步是把它们写在你的URLconf中。 你需要这样写:

from django.contrib.auth.views import login, logout

urlpatterns = patterns('',
  # existing patterns here...
  (r'^accounts/login/$', login),
  (r'^accounts/logout/$', logout),
)

/accounts/login/ 和 /accounts/logout/ 是Django提供的视图的默认URL。

缺省情况下, login 视图渲染 registragiton/login.html 模板(可以通过视图的额外参数 template_name 修改这个模板名称)。 这个表单必须包含 username 和 password 域。如下示例: 一个简单的 template 看起来是这样的

{% extends "base.html" %}

{% block content %}

 {% if form.errors %}
  <p class="error">Sorry, that's not a valid username or password</p>
 {% endif %}

 <form action="" method="post">
  <label for="username">User name:</label>
  <input type="text" name="username" value="" id="username">
  <label for="password">Password:</label>
  <input type="password" name="password" value="" id="password">

  <input type="submit" value="login" />
  <input type="hidden" name="next" value="{{ next|escape }}" />
 </form>

{% endblock %}

如果用户登录成功,缺省会重定向到 /accounts/profile 。 你可以提供一个保存登录后重定向URL的next隐藏域来重载它的行为。 也可以把值以GET参数的形式发送给视图函数,它会以变量next的形式保存在上下文中,这样你就可以把它用在隐藏域上了。

logout视图有一些不同。 默认情况下它渲染 registration/logged_out.html 模板(这个视图一般包含你已经成功退出的信息)。 视图中还可以包含一个参数 next_page 用于退出后重定向。


 类似资料:
  • 本文向大家介绍django rest framework vue 实现用户登录详解,包括了django rest framework vue 实现用户登录详解的使用技巧和注意事项,需要的朋友参考一下 后端代码就不介绍了,可以参考 django rest framework 实现用户登录认证 这里介绍一下前端代码,和前后端的联调过程 在components下新建login.vue 文件 修改roun

  • 本文向大家介绍django rest framework 实现用户登录认证详解,包括了django rest framework 实现用户登录认证详解的使用技巧和注意事项,需要的朋友参考一下 1、安装 2、创建项目及应用 创建项目 创建应用 目录结构如图 3、设置settings.py 设置数据库连接 添加应用 4、创建用户信息models,在models.py 在项目下执行命令生成数据表 5、在

  • 本文向大家介绍JSP实现用户登录、注册和退出功能,包括了JSP实现用户登录、注册和退出功能的使用技巧和注意事项,需要的朋友参考一下 本文讲述使用JSP实现用户登录,包括用户登录、注册和退出功能等。 1.系统用例图 2.页面流程图 3.数据库设计 本例使用oracle数据库 创建用户表 包括id,username,password和email,共4个字段 4.页面设计 4.1登录页面 login.j

  • 本文向大家介绍Yii框架实现的验证码、登录及退出功能示例,包括了Yii框架实现的验证码、登录及退出功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii框架实现的验证码、登录及退出功能。分享给大家供大家参考,具体如下: 捣鼓了一下午,总算走通了,下面贴出代码。 Model 注:我的用户表是auth,所以模型是Auth.php 注:IndexForm也可以写成LoginForm,只是

  • 本文向大家介绍详解Python的Django框架中的通用视图,包括了详解Python的Django框架中的通用视图的使用技巧和注意事项,需要的朋友参考一下 通用视图 1. 前言 回想一下,在Django中view层起到的作用是相当于controller的角色,在view中实施的 动作,一般是取得请求参数,再从model中得到数据,再通过数据创建模板,返回相应 响应对象。但在一些比较通用的功能中,比

  • 本文向大家介绍详解Python的Django框架中的中间件,包括了详解Python的Django框架中的中间件的使用技巧和注意事项,需要的朋友参考一下 什么是中间件 我们从一个简单的例子开始。 高流量的站点通常需要将Django部署在负载平衡proxy之后。 这种方式将带来一些复杂性,其一就是每个request中的远程IP地址(request.META["REMOTE_IP"])将指向该负载平衡p