Django中内置的登录、退出、修改密码方法。

1、url.py中使用django.contrib.auth中的views函数,django.views.generic中的TemplateView函数,Django==2.04下测试成功。Django2.1的内置方法不同。contrib.auth.views 模块下所有的 函数视图(FBV)被移除,使用相应的 类视图(CBV),

from django.contrib import admin
from django.urls import path
from django.conf.urls import url,include
from app import views
from django.conf.urls import url,include
from django.contrib.auth import views as auth_views #使用默认的视图函数来实现loginlogout
from django.views.generic import TemplateView urlpatterns = [
url('admin/', admin.site.urls),
url('login/$', auth_views.login, {"template_name": "registration/login.html"}, name="user_login"), # 内置login方法,定制页面,需设定settings中的LOGIN_REDIRECT_URL = ‘/home’默认页面
url('logout/$', auth_views.logout, {"template_name": "registration/logout.html"}, name="user_logout"),# 内置logout方法,定制页面
url(r'^password-change/$', auth_views.password_change,{'post_change_redirect': '/password-change-done'}, name="password_change"), #html页面默认在registration内,修改了页面
url(r'^password-change-done/$', auth_views.password_change_done, name="password_change_done"),
url(r'home/',TemplateView.as_view(template_name="home.html"),name='home'),#默认的登录页面
url(r'^$',TemplateView.as_view(template_name="home.html"),name='home'),
]

Django2.1的内置方法不同。contrib.auth.views 模块下所有的 函数视图(FBV)被移除,使用相应的 类视图(CBV),登录、退出、修改密码方法修改为:

# from  django.conf.urls import url
from django.urls import path, re_path
from . import views
from django.contrib.auth import views as auth_views urlpatterns = [
path('login/', auth_views.LoginView.as_view(template_name="account/login.html"), name="user_login"),
path('logout', auth_views.LogoutView.as_view(template_name="account/logout.html"), name="user_logout"),
path('register/', views.user_register, name="user_register"),
path('password-change/', auth_views.PasswordChangeView.as_view(template_name="account/password_change_form.html",
success_url="/account/password-change-done/"),name='password_change'),
path('password-change-done/', auth_views.PasswordChangeDoneView.as_view(template_name=
                    "account/password_change_done.html"),name='password_change-done'),
]

2、登录页面、退出页面

  可以使用默认的登录退出页面,但一般需要自己定制页面,实现功能的跳转。注意html文件存放在..\templates\registration下,也可通过‘’template_name”设定在其他位置。

login.html

{% extends "base.html" %}
{% load staticfiles %}
{% block title %}Login {% endblock %}
{% block content %}
<div class="row text-center vertical-middle-sm">
<h1>Login</h1>
<p>Input your username and password</p>
<form class="form-horizontal" action="{% url 'user_login' %}" method="post" >{% csrf_token %}
<!-- {{ form.as_p }} -->
<div class="form-group">
<label for="{{ form.username.id_for_label }}" class="col-md-5 control-label"
style="color:red"><span class="glyphicon glyphicon-user"></span>Username</label>
<div class="col-md-6 text-left">{{ form.username }}</div>
</div>
<div class="form-group">
<label for="{{ form.password.id_for_label }}" class="col-md-5 control-label"
style="color:blue"><span class="glyphicon-floppy-open"></span>Password</label>
<div class="col-md-6 text-left">{{ form.password }}</div>
</div> <input type="submit" class="btn btn-primary btn-lg" value="Login">
</form>
</div>
{% endblock %}

logout.html

{% extends "base.html" %}
{% block title %}Logout{% endblock %}
{% block content %}
<div class="row text-center vertical-middle-sm">
<p>You have log out!</p>
<p>You can <a href="{% url 'user_login' %}"><strong>Login </strong> </a> again</p>
</div>
{% endblock %}

3.密码修改页面,注意html文件存放在..\templates\registration下,也可通过‘’template_name”设定在其他位置,必需设定'post_change_redirect': '/password-change-done'

  • password_change_form.html

{% block content %}
<div class="row text-center vertical-middle-sm">
<h1>Change Password </h1>
<p>Please enter your old password,fow security's sake,an then enter your new password twice so wn can verify ou typed it in correctly.</p>
{% if form.new_password1.help_text %}
<div class="text-left" style="margin-left: 400px">
<p>{{ form.new_password1.help_text|safe }}</p>
</div>
{% endif %}
<form class="form-horizontal" action="." method="post">{% csrf_token %}
<div class="form-group">
<label class="col-md-5 control-label text-right">
{{ form.old_password.label_tag }}
</label>
<div class="col-md-6 text-left">{{ form.old_password }}</div>
</div>
<div class="form-group">
<label class="col-md-5 control-label text-right">
{{ form.new_password1.label_tag }}
</label>
<div class="col-md-6 text-left">{{ form.new_password1 }}</div>
</div>
<div class="form-group">
<label class="col-md-5 control-label text-right">
{{ form.new_password2.label_tag }}
</label>
<div class="col-md-6 text-left">{{ form.new_password2 }}</div>
</div>
<input type="submit" value="Change my password" class="btn btn-primary btn-lg">
</form>
</div>
{% endblock %}
  • password_change_done.html
{% extends "base.html" %}
{% block title %}password change done{% endblock %} {% block content %}
<div class="row text-center vertical-middle-sm">
<P>Your password was changed.</P>
</div>
{% endblock %}

4.注意事项

  • 使用django auth进行登录,当验证登陆成功后,页面会自动跳转到/account/profile,报找不到页面的错误,需要在project的setting.py中设定

    LOGIN_REDIRECT_URL = ‘/home’,指定登陆成功后跳转的页面。
  • 9、清理session数据,自此django的认证登陆登出功能完成,但是此处有个问题,就是当用户在手动关闭浏览器的时候,session数据不会自动失效,数据库的session数据也不会自动删除,所以需要在setting.py中加一些配置,然后写一个定时清理该表过期session数据的脚本

    SESSION_COOKIE_AGE = 60*30#设置session过期时间为30分钟
    SESSION_EXPIRE_AT_BROWSER_CLOSE = True #当浏览器被关闭的时候将session失效,但是不能删除数据库的session数据
    SESSION_SAVE_EVERY_REQUEST = True #每次请求都要保存一下session

Django的内置登录、退出、修改密码方法的更多相关文章

  1. django的内置信号

    Model singnalspre_init 在model执行构造方法之前自动触发post_init django的model在执行构造方法之后,自动触发pre_save django的对象保存之前, ...

  2. Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等

    http://blog.csdn.net/h7870181/article/details/8653865 以前学习过用Scoket 建立聊天,简单的建立聊天是没问题的,但如果要实现多人复杂的聊天,后 ...

  3. openfire Android学习(一)----实现用户注册、登录、修改密码和注销等

    以前学习过用Scoket 建立聊天,简单的建立聊天是没问题的,但如果要实现多人复杂的聊天,后台服务器代码就比较复杂,对于我这新手来讲就比较难了.后来在网上看到用openfire做服务器,利用强大的Sm ...

  4. node+mysql+express实现登录/注册/修改密码/删除用户 接口

    实现用户的注册.登录.修改密码.删除用户操作 用到的数据库:nodecms:表:user 目录结构: db目录下存放数据库操作语句: userSQL.js 用户有关的操作语句 router目录 接口路 ...

  5. ecshop2.73修改密码方法|ecshop2.73修改密码方法

    ecshop2.73修改密码方法|ecshop2.73修改密码方法 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2012-09-09   ecshop2.73正式版后 ...

  6. Django扩展内置User类

    内置User类 使用内置User可以方便实现登录验证,利用Admin管理界面还可以方便添加.删除.修改用户. 一个内置的User类定义了以下字段: username: 用户名 password: 密码 ...

  7. Mysql 免密码登录,修改密码及忘记密码操作

    ----免密码登陆 方式一 my.cnf增加[client]标签 [client] user="root" password="你的密码" 单对定义不同的客户端 ...

  8. mysql8忘记登录密码时,修改密码方法

    一.停止mysqld进程 systemctl stop mysqld.service 二.修改/etc/my.cnf(在mysqld选项添加skip-grant-tables),设置免密码登录: vi ...

  9. js内置构造函数属性修改问题

    在学习js原型时遇到一个问题,Array,Object等内置构造函数部分属性无法修改,我猜测可能是因为浏览器实现的原因造成的. 1.修改name属性无效. <script type=" ...

随机推荐

  1. 【java】final修饰符介绍

    final: 最终,作为一个修饰符特点:1.可以修饰类,函数,变量2.被final修的的类不能被继承.因此类用final修饰可以避免被继承,被子类重写功能.3.被final修饰的方法不可以被重写.4. ...

  2. 解压zipfile & tarfile

    def __un_zip(self, file_path): """解压.zip格式文件到同名目录下,若解压之前就存在该目录说明已解压,跳过解压过程,返回该目录" ...

  3. 批处理关闭防火墙.bat

    批处理关闭防火墙.bat @echo offecho 用批处理关闭防火墙,包括家庭和工作网络位置.公用网络位置设置.netsh firewall set opmode mode=disable pro ...

  4. 查看docker容器的内存占用

    使用docker stats命令可以查看容器的内存,但是有时候docker stats命令获得的数据可能准确,可以参考下面这种方式 先通过docker ps -a 找到容器的container id ...

  5. 滑雪(dp)

    问题 H: [例9.24]滑雪 时间限制: 1 Sec  内存限制: 128 MB提交: 21  解决: 13 题目描述 小明喜欢滑雪,因为滑雪的确很刺激,可是为了获得速度,滑的区域必须向下倾斜,当小 ...

  6. 知识点:Java 内存模型完全解密

    Java虚拟机(JVM) 规范中定义了一种Java的内存模型,即Java Memoory Model(简称JMM),用来实现让Java程序在各个平台下都能达到一致的内存访问效果. JVM是整个虚拟机, ...

  7. Using a ScrollView - RN4

    使用滚动条. 1. import import {ScrollView} from "react-native"; 2. Using <ScrollView> ... ...

  8. leetCode27.移除元素

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  9. 正则表达式re.sub替换不完整的问题现象及其根本原因

    title: 正则表达式re.sub替换不完整的问题现象及其根本原因 toc: true comment: true date: 2018-08-27 21:48:22 tags: ["Py ...

  10. TCARS: Time- and Community-Aware Recommendation System(时间感知和社区感知推荐系统)

    随着用户在物品上产生了大量行为,推荐系统成为了线上系统的重要组成部分.推荐系统算法使用用户对物品的行为信息以及上下文数据为每个用户推荐一组物品.算法根据用户之间及物品之间的相似度建立.本文介绍了一个基 ...