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 相关文章推荐
使用Django的模版来配合字符串翻译工作
Jul 27 Python
Python 搭建Web站点之Web服务器网关接口
Nov 06 Python
python删除某个字符
Mar 19 Python
TensorFlow实现随机训练和批量训练的方法
Apr 28 Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 Python
对python 通过ssh访问数据库的实例详解
Feb 19 Python
Python实现直播推流效果
Nov 26 Python
Win 10下Anaconda虚拟环境的教程
May 18 Python
python tkinter实现连连看游戏
Nov 16 Python
Selenium 安装和简单使用的实现
Dec 04 Python
python实现简单的学生管理系统
Feb 22 Python
解决Jupyter-notebook不弹出默认浏览器的问题
Mar 30 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
web方式ftp
2006/10/09 PHP
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
新手入门常用代码集锦
2007/01/11 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
JavaScript事件对象event用法分析
2018/07/27 Javascript
详解在Python中处理异常的教程
2015/05/24 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
python中使用psutil查看内存占用的情况
2018/06/11 Python
python版本单链表实现代码
2018/09/28 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
HTML5 Canvas中使用用路径描画圆弧
2015/01/01 HTML / CSS
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
程序运行正确, 但退出时却"core dump"了,怎么回事
2014/02/19 面试题
大学生志愿者感言
2014/01/15 职场文书
《燕子专列》教学反思
2014/02/21 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
老师对学生的寄语
2014/04/09 职场文书
珍惜时间演讲稿
2014/05/14 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
商铺租房协议书范本
2014/12/04 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android