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发送邮件实例讲解(python发邮件附件可以使用email模块实现)
Dec 03 Python
Python简单获取自身外网IP的方法
Sep 18 Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
Jan 15 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
PyCharm配置mongo插件的方法
Nov 30 Python
在python 不同时区之间的差值与转换方法
Jan 14 Python
Python学习笔记之字符串和字符串方法实例详解
Aug 22 Python
Python 用turtle实现用正方形画圆的例子
Nov 21 Python
使用Python通过oBIX协议访问Niagara数据的示例
Dec 04 Python
Selenium Webdriver元素定位的八种常用方式(小结)
Jan 13 Python
详解用 python-docx 创建浮动图片
Jan 24 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版网站缓存加快打开速度的方法分享
2012/06/03 PHP
Linux环境下搭建php开发环境的操作步骤
2013/06/17 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
完美利用Yii2微信后台开发的系列总结
2016/07/18 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
javascript 树控件 比较好用
2009/06/11 Javascript
javascript中parseInt()函数的定义和用法分析
2014/12/20 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
react-router 路由切换动画的实现示例
2018/12/03 Javascript
改进Django中的表单的简单方法
2015/07/17 Python
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
简单了解什么是神经网络
2017/12/23 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
TensorFlow神经网络优化策略学习
2018/03/09 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
Python环境管理virtualenv&amp;virtualenvwrapper的配置详解
2020/07/01 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
劳资专员岗位职责
2013/12/27 职场文书
公务员培训心得体会
2013/12/28 职场文书
办理暂住证介绍信
2014/01/11 职场文书
中医临床专业自我鉴定范文
2014/01/15 职场文书
一句话工作感言
2014/03/01 职场文书
蓝颜请假条
2014/04/11 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
网站出售协议书范文
2014/10/10 职场文书
预备党员的思想汇报,你真的会写吗?
2019/06/28 职场文书