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图像处理之镜像实现方法
May 30 Python
RC4文件加密的python实现方法
Jun 30 Python
Python内置模块turtle绘图详解
Dec 09 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
Python编写一个优美的下载器
Apr 15 Python
python里运用私有属性和方法总结
Jul 08 Python
Python 中判断列表是否为空的方法
Nov 24 Python
使用Python实现批量ping操作方法
May 06 Python
python subprocess pipe 实时输出日志的操作
Dec 05 Python
详解Python类和对象内容
Jun 22 Python
Python中itertools库的四个函数介绍
Apr 06 Python
Python 读取千万级数据自动写入 MySQL 数据库
Jun 28 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 Undefined index报错的修复方法
2011/07/17 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
javascript css float属性的特殊写法
2008/11/13 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
js输出列表实现代码
2010/09/12 Javascript
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
详解javascript函数的参数
2015/11/10 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
Python中isnumeric()方法的使用简介
2015/05/19 Python
Python修改MP3文件的方法
2015/06/15 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
Python之re操作方法(详解)
2017/06/14 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
详解HTML5将footer置于页面最底部的方法(CSS+JS)
2018/10/11 HTML / CSS
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
优秀班集体获奖感言
2014/02/03 职场文书
创建青年文明号材料
2014/05/09 职场文书
入党积极分子培养人意见
2015/06/02 职场文书