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常见格式化字符串方法小结【百分号与format方法】
Sep 18 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
Apr 05 Python
Python中用字符串调用函数或方法示例代码
Aug 04 Python
如何使用Python 打印各种三角形
Jun 28 Python
python-tornado的接口用swagger进行包装的实例
Aug 29 Python
Python实现队列的方法示例小结【数组,链表】
Feb 22 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
Feb 25 Python
Pytorch十九种损失函数的使用详解
Apr 29 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
Sep 29 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
Feb 22 Python
python中opencv实现图片文本倾斜校正
Jun 11 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
Laravel框架控制器的middleware中间件用法分析
2019/09/30 PHP
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
基于JavaScript实现焦点图轮播效果
2017/03/27 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
django连接mysql配置方法总结(推荐)
2018/08/18 Python
python使用KNN算法识别手写数字
2019/04/25 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
Python实现堡垒机模式下远程命令执行操作示例
2019/05/09 Python
python实现动态创建类的方法分析
2019/06/25 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Python中turtle库的使用实例
2019/09/09 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
高三自我评价
2014/02/01 职场文书
Redis实现订单自动过期功能的示例代码
2021/05/08 Redis
Python实现socket库网络通信套接字
2021/06/04 Python
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
Java中的随机数Random
2022/03/17 Java/Android