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 元类使用说明
Dec 18 Python
python的类变量和成员变量用法实例教程
Aug 25 Python
Python函数返回值实例分析
Jun 08 Python
python简单线程和协程学习心得(分享)
Jun 14 Python
Python request设置HTTPS代理代码解析
Feb 12 Python
使用Python的toolz库开始函数式编程的方法
Nov 15 Python
python 监听salt job状态,并任务数据推送到redis中的方法
Jan 14 Python
如何基于Python获取图片的物理尺寸
Nov 25 Python
高考考python编程是真的吗
Jul 20 Python
Python数据可视化常用4大绘图库原理详解
Oct 23 Python
Python利用myqr库创建自己的二维码
Nov 24 Python
Python+Tkinter制作专属图形化界面
Apr 01 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 JSON 数据解析代码
2010/05/26 PHP
ThinkPHP中的系统常量和预定义常量集合
2014/07/01 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
2015/12/20 PHP
基于php判断客户端类型
2016/10/14 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
简单的JS多重继承示例
2008/03/13 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
JavaScript 五大常见函数
2018/03/23 Javascript
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
python动态监控日志内容的示例
2014/02/16 Python
Python实现获取某天是某个月中的第几周
2015/02/11 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
使用python遍历指定城市的一周气温
2017/03/31 Python
使用Python的datetime库处理时间(RPA流程)
2019/11/24 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
2019史上最全Database工程师题库
2015/12/06 面试题
电信专业应届生自荐信
2013/09/28 职场文书
羽毛球社团活动总结
2014/06/27 职场文书
农村党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
2014年科研工作总结
2014/12/03 职场文书
爱心助学感谢信
2015/01/21 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python