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自动化测试之setUp与tearDown实例
Sep 28 Python
python hbase读取数据发送kafka的方法
Dec 27 Python
如何通过Python实现标签云算法
Jul 02 Python
Python实现微信翻译机器人的方法
Aug 13 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
Pytorch实现神经网络的分类方式
Jan 08 Python
Python模块 _winreg操作注册表
Feb 05 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
Apr 15 Python
python爬虫实例之获取动漫截图
May 31 Python
哪种Python框架适合你?简单介绍几种主流Python框架
Aug 04 Python
Python基于execjs运行js过程解析
Nov 27 Python
OpenCV项目实践之停车场车位实时检测
Apr 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
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
Javascript冒泡排序算法详解
2014/12/03 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
JavaScript实现瀑布流图片效果
2017/06/30 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
耐克中国官方商城:Nike中国
2018/10/18 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
祖国在我心中演讲稿
2014/01/15 职场文书
学校联谊协议书
2014/09/16 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
python 爬取天气网卫星图片
2021/06/07 Python
新手入门Mysql--概念
2021/06/18 MySQL
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL