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 常用 PEP8 编码规范详解
Jan 22 Python
python模拟登录并且保持cookie的方法详解
Apr 04 Python
Python 实现网页自动截图的示例讲解
May 17 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
Python实现代码统计工具
Sep 19 Python
Python高级property属性用法实例分析
Nov 19 Python
pyinstaller打包找不到文件的问题解决
Apr 15 Python
Python退出时强制运行一段代码的实现方法
Apr 29 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
Python绘图之二维图与三维图详解
Aug 04 Python
Python深度学习之实现卷积神经网络
Jun 05 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中call_user_func_array()函数的用法演示
2012/02/05 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
html中table数据排序的js代码
2011/08/09 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
温习Javascript基础语法之词法结构
2016/05/31 Javascript
Angularjs---项目搭建图文教程
2016/07/08 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
vue-ajax小封装实例
2017/09/18 Javascript
Vue写一个简单的倒计时按钮功能
2018/04/20 Javascript
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
vue实现图片上传功能
2020/05/28 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python中zip()函数的简单用法举例
2019/09/02 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
在keras里实现自定义上采样层
2020/06/28 Python
Python面向对象实现方法总结
2020/08/12 Python
python使用matplotlib绘制折线图的示例代码
2020/09/22 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
行政人员工作职责
2013/12/05 职场文书
最新结婚典礼主持词
2014/03/14 职场文书
大学生职业生涯规划大赛作品(精品)
2014/09/17 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
入党函调证明材料
2014/12/24 职场文书