Django框架使用内置方法实现登录功能详解


Posted in Python onJune 12, 2019

本文实例讲述了Django框架使用内置方法实现登录功能。分享给大家供大家参考,具体如下:

一 内置登录退出思维导图

Django框架使用内置方法实现登录功能详解

二 Django内置登录方法

1 位置

Django框架使用内置方法实现登录功能详解

2 源码

@deprecate_current_app
@sensitive_post_parameters()
@csrf_protect
@never_cache
# 视图函数要渲染的模板位置(registration/login.html)
def login(request, template_name='registration/login.html',
     redirect_field_name=REDIRECT_FIELD_NAME,
     authentication_form=AuthenticationForm,
     extra_context=None, redirect_authenticated_user=False):
  """
  Displays the login form and handles the login action.
  """
  redirect_to = request.POST.get(redirect_field_name, request.GET.get(redirect_field_name, ''))
  if redirect_authenticated_user and request.user.is_authenticated:
    redirect_to = _get_login_redirect_url(request, redirect_to)
    if redirect_to == request.path:
      raise ValueError(
        "Redirection loop for authenticated user detected. Check that "
        "your LOGIN_REDIRECT_URL doesn't point to a login page."
      )
    return HttpResponseRedirect(redirect_to)
  elif request.method == "POST":
    form = authentication_form(request, data=request.POST)
    if form.is_valid():
      auth_login(request, form.get_user())
      return HttpResponseRedirect(_get_login_redirect_url(request, redirect_to))
  else:
    form = authentication_form(request)
  current_site = get_current_site(request)
  context = {
    'form': form,
    redirect_field_name: redirect_to,
    'site': current_site,
    'site_name': current_site.name,
  }
  if extra_context is not None:
    context.update(extra_context)
  return TemplateResponse(request, template_name, context)

三 实战一 

1 编辑mysite/account/urls.py

from django.conf.urls import url
from . import views
from django.contrib.auth import views as auth_views
urlpatterns = [
  # 自定义登录
  # url(r'^login/$', views.user_login, name='user_login'),
  # django内置的登录
  url(r"^login/$", auth_views.login, name="user_login"),
]

2 因为默认的模板位置为registration/login.html,因此我们创建该文档如下:

{% extends "base.html" %}
{% block title %}登录{% endblock %}
{% block content %}
<div class="row text-center vertical-middle-sm">
 <h1>登录</h1>
 <p>请输入用户名和密码</p>
  <!--用具体的URL指明了数据的POST目标-->
 <form class="form-horizontal" action="{% url 'account:user_login' %}" method="post">
 {% csrf_token %}
    <!--每个表单元素在一对P标签内-->
    <!--{{ form.as_p }}-->
    <!--使用Bootstrap样式使得表单更美丽-->
    <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 glyphicon-floppy-open"></span>Password</label>
  <div class="col-md-6 text-left">{{ form.password }}</div>
 </div>
 <input type="submit" value="Login">
 </form>
</div>
{% endblock %}

3 修改mysite/mysite/settings.py

# 登录后重定向到http://localhost:8000/blog/页面
LOGIN_REDIRECT_URL = '/blog/'

4 测试

Django框架使用内置方法实现登录功能详解

Django框架使用内置方法实现登录功能详解

四 实战二

1 编辑mysite/account/urls.py

from django.conf.urls import url
from . import views
from django.contrib.auth import views as auth_views
urlpatterns = [
  # 自定义登录
  # url(r'^login/$', views.user_login, name='user_login'),
  # django内置的登录
  url(r"^login/$", auth_views.login, name="user_login"),
  url(r"^new-login/$", auth_views.login, {"template_name": "account/login.html"}),
]

2 测试

Django框架使用内置方法实现登录功能详解

Django框架使用内置方法实现登录功能详解

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
Python中使用PIL库实现图片高斯模糊实例
Feb 08 Python
简单介绍Python中的readline()方法的使用
May 24 Python
python实现汉诺塔递归算法经典案例
Mar 01 Python
Python实现网站注册验证码生成类
Jun 08 Python
Python中类的创建和实例化操作示例
Feb 27 Python
python 读取修改pcap包的例子
Jul 23 Python
Python 中由 yield 实现异步操作
May 04 Python
如何在mac下配置python虚拟环境
Jul 06 Python
Pandas的Apply函数具体使用
Jul 21 Python
python使用Word2Vec进行情感分析解析
Jul 31 Python
Python判断字符串是否为合法标示符操作
Sep 03 Python
详解python的内存分配机制
May 10 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
Jun 12 #Python
python,Django实现的淘宝客登录功能示例
Jun 12 #Python
selenium 安装与chromedriver安装的方法步骤
Jun 12 #Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
Jun 12 #Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 #Python
对python3 Serial 串口助手的接收读取数据方法详解
Jun 12 #Python
Python 串口读写的实现方法
Jun 12 #Python
You might like
提升PHP速度全攻略
2006/10/09 PHP
ajax实现无刷新分页(php)
2010/07/18 PHP
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
2016/03/07 PHP
Javascript中valueOf与toString区别浅析
2013/03/19 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
在localStorage中存储对象数组并读取的方法
2016/09/24 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
九步学会Python装饰器
2015/05/09 Python
Python自定义主从分布式架构实例分析
2016/09/19 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
浅谈matplotlib.pyplot与axes的关系
2020/03/06 Python
Python 多进程原理及实现
2020/12/21 Python
意大利文具和办公产品在线商店:Y-Office
2020/02/27 全球购物
小学教师的个人自我鉴定
2013/10/24 职场文书
房地产销售经理岗位职责
2014/01/01 职场文书
应届大学生自荐书
2014/06/17 职场文书
医院护士党的群众路线教育实践活动对照检查材料思想汇报
2014/10/04 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书
python编程项目中线上问题排查与解决
2021/11/01 Python
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技