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实现的数据结构与算法之快速排序详解
Apr 22 Python
在Python中操作字典之setdefault()方法的使用
May 21 Python
深入解析Python的Tornado框架中内置的模板引擎
Jul 11 Python
Python3实现购物车功能
Apr 18 Python
Python骚操作之动态定义函数
Mar 26 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
Feb 29 Python
Python3将ipa包中的文件按大小排序
Apr 17 Python
Python实现aes加密解密多种方法解析
May 15 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
Jan 15 Python
浅谈python中的多态
Jun 15 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 魔术函数使用说明
2010/05/14 PHP
php $_SERVER[&quot;REQUEST_URI&quot;]获取值的通用解决方法
2010/06/21 PHP
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
javascript之AJAX框架使用说明
2010/04/24 Javascript
js的一些常用方法小结
2011/06/29 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
JavaScript之RegExp_动力节点Java学院整理
2017/06/29 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
vue中各种通信传值方式总结
2019/02/14 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
Python的gevent框架的入门教程
2015/04/29 Python
python中实现k-means聚类算法详解
2017/11/11 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
python中dict()的高级用法实现
2019/11/13 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
中药专业大学生医药工作求职信
2013/10/25 职场文书
记者岗位职责
2014/01/06 职场文书
户外亲子活动策划方案
2014/02/07 职场文书
优秀大学生职业生涯规划书
2014/02/27 职场文书
商场周年庆活动方案
2014/08/19 职场文书
2014年妇产科工作总结
2014/12/08 职场文书
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript