horizon登录过程分析(juno)

本文详细分析了Horizon登录时的表单处理、URL分级处理和内容验证流程,涉及Django的URL映射、视图函数、表单验证及后端认证机制。通过对_openstack_dashboard/urls.py、openstack_auth.urls、openstack_auth.views.login函数及openstack_auth.forms.py中相关代码的解读,揭示了用户登录过程中数据交互与验证的全过程。
摘要由CSDN通过智能技术生成

下面主要记录下horizon登录和django框架的认证分析

运行服务器后,进入 http://0.0.0.0:8080后,首先进入setting.py中
这里写图片描述
根据url映射进入openstack_dashboard/urls.py
这里写图片描述
根据url匹配知 http:0.0.0.0:8080 交由openstack_dashboard/views.py.splash函数处理。查看views::splash函数

/openstack_dashboard/views.py
这里写图片描述

1 表单处理

在splash函数中,首先根据djanmgo session会话判断用户是否登录,如果登录,则转至用户主界面,否则就进入登录界面。此处分析登录流程。首先根据forms生成表单项,并将表单项传入splash.html模板中
进入 horizon/templates/splash.html
这里写图片描述
splash.html主要加载auth/_login.html,查看_login.html文件
进入horizon/templates/auth/_login.html
这里写图片描述
显示登录主界面后,对于用户输入用户名与密码,提交表单时,表单的action属性对应为url ‘login’,此时,django搜寻urls中 name=’login’的url,(ctrl+单击url,跳转至openstack_auth.urls)即对应为 openstack_auth.urls,也就是action为/auth/login.
_login.html表单继承自表单_modal_form.html模板,并重写了form_action属性
_modal_form.html:
这里写图片描述
这部分定义了action为form_action,methosd=”POST”,并定义了modal-body块用来填写用户名与密码。

_login.html文件重定义了action属性,modal-body内容。

django中{%url ‘login’%} 指代urls中name为’login’对应的地址并替代;解析出来的地址为0.0.0.0:8080/auth/login
参考地址

  1. https://docs.djangoproject.com/es/1.9/ref/templates/builtins/#url
  2. http://www.cnblogs.com/no13bus/p/3767521.html
  3. http://www.liujiangblog.com/course/django/89

2 表单url分级处理过程

当表单接受数据,并根据action=’auth/login’及django分级匹配:
这里写图片描述

django中include将截断匹配的url并将剩余的字符串发至包含的urls中再做处理。

进入/openstack_auth/urls.py
这里写图片描述
根据上图/login的地址对应openstack_auth.views:login函数处理。

3 表单内容处理

在本机安装部署horizon时,按照上一篇horizon二次开发部署,在 requirements.txt中会默认安装openstack_auth认证模块

进入/openstack_auth.views.py文件
整个login函数如下:

.........
from django.contrib.auth import views as django_auth_views
.........
# This is historic and is added back in to not break older versions of
# Horizon, fix to Horizon to remove this requirement was committed in
# Juno
from openstack_auth.forms import Login  # noqa
from openstack_auth import user as auth_user
from openstack_auth import utils

@sensitive_post_parameters()
@csrf_protect
@never_cache
def login(request, template_name=None, extra_context=None, **kwargs):
    """Logs a user in using the :class:`~openstack_auth.forms.Login` form."""
    if not request.is_ajax():
        # If the u
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值