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 SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 Python
Python函数式编程指南(二):从函数开始
Jun 24 Python
基于python实现微信模板消息
Dec 21 Python
Python 操作MySQL详解及实例
Apr 30 Python
python执行系统命令后获取返回值的几种方式集合
May 12 Python
flask框架中勾子函数的使用详解
Aug 01 Python
django+mysql的使用示例
Nov 23 Python
Python模拟百度自动输入搜索功能的实例
Feb 14 Python
pyqt5 使用label控件实时显示时间的实例
Jun 14 Python
python批量爬取下载抖音视频
Jun 17 Python
python opencv minAreaRect 生成最小外接矩形的方法
Jul 01 Python
Python直接赋值及深浅拷贝原理详解
Sep 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
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
2014/03/03 Javascript
jQuery 和 CSS 的文本特效插件集锦
2014/12/12 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
JS验证不重复验证码
2017/02/10 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
使用vue构建多页面应用的示例
2020/10/22 Javascript
跟老齐学Python之集合的关系
2014/09/24 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
python生成器推导式用法简单示例
2019/10/08 Python
如何用Python 加密文件
2020/09/10 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
介绍一下gcc特性
2015/10/31 面试题
自动化专业大学生职业生涯规划范文:爱拚才会赢
2014/09/12 职场文书
给客户的检讨书
2014/12/21 职场文书
公司辞职信模板
2015/05/13 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
python requests模块的使用示例
2021/04/07 Python
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
MySQL获取所有分类的前N条记录
2021/05/07 MySQL