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数据结构之图深度优先和广度优先实例详解
Jul 08 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
Python读取Json字典写入Excel表格的方法
Jan 03 Python
Python网络编程之TCP与UDP协议套接字用法示例
Feb 02 Python
Python中的正则表达式与JSON数据交换格式
Jul 03 Python
TensorFlow实现简单的CNN的方法
Jul 18 Python
python的scipy实现插值的示例代码
Nov 12 Python
Python Numpy数组扩展repeat和tile使用实例解析
Dec 09 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
keras读取h5文件load_weights、load代码操作
Jun 12 Python
Python中json.dumps()函数的使用解析
May 17 Python
Python 居然可以在 Excel 中画画你知道吗
Feb 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 IP转换整形(ip2long)的详解
2013/06/06 PHP
php接口隔离原则实例分析
2019/11/11 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
javascript闭包的高级使用方法实例
2013/07/04 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
js实现详情页放大镜效果
2020/10/28 Javascript
python实现随机漫步算法
2018/08/27 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
餐饮业会计岗位职责
2013/12/19 职场文书
安全生产检讨书
2014/01/21 职场文书
路政管理毕业自荐书范文
2014/02/10 职场文书
党员四风剖析材料
2014/08/27 职场文书
党委书记群众路线对照检查材料思想汇报
2014/10/04 职场文书
中学生自我评价2015
2015/03/03 职场文书
死者家属慰问信
2015/03/24 职场文书
交通事故被告答辩状
2015/05/22 职场文书
党支部审查意见
2015/06/02 职场文书