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开发之thread线程基础实例入门
Nov 11 Python
python中函数传参详解
Jul 03 Python
Python模拟简单电梯调度算法示例
Aug 20 Python
Python使用googletrans报错的解决方法
Sep 25 Python
对Python协程之异步同步的区别详解
Feb 19 Python
用python实现刷点击率的示例代码
Feb 21 Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 Python
Django 批量插入数据的实现方法
Jan 12 Python
git查看、创建、删除、本地、远程分支方法详解
Feb 18 Python
Python Process创建进程的2种方法详解
Jan 25 Python
Python 图片处理库exifread详解
Feb 25 Python
python爬虫之selenium库的安装及使用教程
May 23 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 zend解密软件绿色版测试可用
2008/04/14 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
2011/10/23 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
CodeIgniter表单验证方法实例详解
2016/03/03 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
Vue实现自带的过滤器实例
2017/03/09 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
2017/06/28 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
windows系统下Python环境的搭建(Aptana Studio)
2017/03/06 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
python脚本后台执行方式
2019/12/21 Python
Python代码需要缩进吗
2020/07/01 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
Python的logging模块基本用法
2020/12/24 Python
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
师范生自我鉴定范文
2013/10/05 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
民事答辩状范本
2015/05/21 职场文书
2015年司法局工作总结
2015/05/22 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
Redis命令处理过程源码解析
2022/02/12 Redis