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 ip正则式
May 07 Python
python实现跨文件全局变量的方法
Jul 07 Python
在Python的web框架中中编写日志列表的教程
Apr 30 Python
Python的Django框架可适配的各种数据库介绍
Jul 15 Python
pandas带有重复索引操作方法
Jun 08 Python
Python 修改列表中的元素方法
Jun 26 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
Django上线部署之IIS的配置方法
Aug 22 Python
pygame实现成语填空游戏
Oct 29 Python
python opencv 检测移动物体并截图保存实例
Mar 10 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
Sep 21 Python
利用Python实时获取steam特惠游戏数据
Jun 25 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中pcntl_fork创建子进程的方法实例
2019/03/14 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
JavaScript中的console.profile()函数详细介绍
2014/12/29 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
[10:54]Team Spirit vs Navi
2018/06/07 DOTA
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
2017/12/09 Python
关于Python的一些学习总结
2018/05/25 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
春秋航空官方网站:Spring Airlines
2017/09/27 全球购物
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
strstr()的简单实现
2013/09/26 面试题
生物化工工艺专业应届生求职信
2013/10/08 职场文书
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
售后服务承诺书
2014/03/26 职场文书
意向书范文
2014/03/31 职场文书
Python基础之变量的相关知识总结
2021/06/23 Python
JAVA springCloud项目搭建流程
2022/05/11 Java/Android
Android Studio 计算器开发
2022/05/20 Java/Android