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实现从url中提取域名的几种方法
Sep 26 Python
python实现下载文件的三种方法
Feb 09 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
python抓取网页中链接的静态图片
Jan 29 Python
python 中字典嵌套列表的方法
Jul 03 Python
更改Python的pip install 默认安装依赖路径方法详解
Oct 27 Python
Django的性能优化实现解析
Jul 30 Python
Python requests模块session代码实例
Apr 14 Python
Python实现初始化不同的变量类型为空值
Jun 02 Python
在keras里面实现计算f1-score的代码
Jun 15 Python
python利用google翻译方法实例(翻译字幕文件)
Sep 21 Python
python之np.argmax()及对axis=0或者1的理解
Jun 02 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下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
PHP 5.3.0 安装分析心得
2009/08/07 PHP
php列出一个目录下的所有文件的代码
2012/10/09 PHP
Js获取事件对象代码
2010/08/05 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
详解Angular 4 表单快速入门
2017/06/05 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
微信小程序实现手指触摸画板
2018/07/09 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
JavaScript实现图片轮播特效
2019/10/23 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
Vite和Vue CLI的优劣
2021/01/30 Vue.js
复制粘贴功能的Python程序
2008/04/04 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
Css3圆角边框制作代码
2015/11/18 HTML / CSS
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
数组越界问题
2015/10/21 面试题
机械制造专业个人的自我评价
2013/12/28 职场文书
创先争优承诺书范文
2014/03/31 职场文书
庆七一主持词
2015/06/29 职场文书
2016思想纪律作风整顿心得体会
2016/01/23 职场文书
人事行政部各岗位职责说明书!
2019/07/15 职场文书
深入理解go slice结构
2021/09/15 Golang