Django里自定义用户登陆及登陆后跳转到登陆前页面的实现

因为下一步要和公司的UM帐号作集成,所以分离出登陆模块,及实现其基本功能是必不可少的。

登陆倒容易,但要实现在登陆后,跳转到登陆前的网页,且显示用户的登陆状态,花了点时间查找代码,

测试了五六种方式,终于搞定。连语法都OK啦。。

login.html:

{% extends "xxxx/index.html" %}
{% load staticfiles %}

{% block title %}用户登陆 {% endblock %}

{% block heading %}
    <h1>LOGIN </h2>
{% endblock %}

{% block content %}
   <div class="tm-middle">
        <div class="uk-container uk-container-center">
            <h3 class="tm-article-subtitle uk-margin-top">
                用户登陆
            </h3>
           <hr class="uk-grid-divider">

            <div class="uk-panel uk-panel-box uk-container-center uk-width-1-3">
                <h3 class="uk-panel-title"><i class="uk-icon-user"></i>用户登陆</h3>

                    <div class="uk-width-3-3">
                        <div>
                            <form action="{% url ‘login‘ %}" class="uk-form uk-form-horizontal" role="form" method="post">
                            <form method="post" action="./?next={{ redirect_to }}">
                                {% csrf_token %}
                                <div class="uk-form-row">
                                    <label for="id_username" class="uk-form-label" style="color: #e28327">用户名:</label>
                                    <div class="uk-form-controls">
                                    <input type="text" name="username" maxlength="100"
                                        autocapitalize="off"
                                        autocorrect="off" class="form-control textinput textInput"
                                        id="id_username" required
                                        {% if form.username.value %}value="{{ form.username.value }}"{% endif %}>
                                    </div>
                                    {% if form.username.errors %}
                                        <p class="text-error">
                                            不正确的用户名
                                        </p>
                                    {% endif %}
                                </div>
                                <div class="uk-form-row uk-width-3-3">
                                    <label for="id_password" class="uk-form-label" style="color: #e28327">密码:</label>
                                    <div class="uk-form-controls">
                                        <input type="password" name="password" maxlength="100"
                                            autocapitalize="off" autocorrect="off" class="form-control textinput textInput"
                                            id="id_password" required>
                                        {% if form.password.errors %}
                                            <p class="text-error">
                                                不正确的用户名或密码
                                            </p>
                                        {% endif %}
                                    </div>
                                </div>
                                <input type="hidden" name="next" value="{{ request.GET.next }}">
                                {% if form.non_field_errors %}
                                    {% for error in form.non_field_errors %}
                                        <div class="well well-small text-error" style="border: none; color: red">请输入正确的用户名和密码</div>
                                    {% endfor %}
                                {% endif %}
                                <button type="submit" class="uk-button uk-button-success uk-margin-top uk-float-right" id="submit-id-submit">登录</button>
                            </form>
                        </div>
                    </div>
                </div>
        </div>
    </div>
    <div style="height:100px"></div>
    {% endblock %}

view.py:


from django.contrib.auth import authenticate, login, logout
@csrf_exempt
def user_login(request):
    redirect_to = request.REQUEST.get(‘next‘, ‘‘)
    if request.method == ‘POST‘:
        username = request.POST.get(‘username‘, ‘‘)
        password = request.POST.get(‘password‘, ‘‘)
        user = authenticate(username=username, password=password)
        if user and user.is_active:
            login(request, user)
            return HttpResponseRedirect(request.POST.get(‘next‘, ‘/‘) or ‘/‘)

    return render_to_response("xxxx/login.html", locals(), RequestContext(request))

urls.py:

url(r‘^accounts/login/$‘, user_login, name=‘login‘),
时间: 2024-08-12 04:12:42

Django里自定义用户登陆及登陆后跳转到登陆前页面的实现的相关文章

在Struts2中实现登陆后跳转到登录前页面

很常见的一个应用就是访问某个页面,因为权限不够,进入登陆页面.人性化的设计是能够在登陆之后,系统跳转到用户原本需要访问的页面.这可以借助拦截器来实现. 在我们验证用户登陆的拦截器里面获取请求地址,并存入session. 1 package com.tuanplus.interceptor; 2 3 import java.util.Map; 4 import javax.servlet.http.HttpServletRequest; 5 import org.apache.struts2.Se

登录成功后跳转回登录前的页面,实现思路

首先,我的网站都是动态跳转的. 整体思路: 1.拦截:在拦截到用于session过期,或用户未登录的情况下,将登录前requestUrl,post请求的参数组成paramMap存放到session中 String requestURL = request.getRequestURL().toString(); Map<Integer, String> paramMap = new HashMap<Integer, String>(); Enumeration e = req.get

vue实现登录后跳转到之前的页面

在开发中我们经常遇到这样的需求,需要用户直接点击一个链接进入到一个页面,用户点击后链接后会触发401拦截返回登录界面,登录后又跳转到链接的页面而不是首页,这种问题该如何去做呢? 先说一下我们需要用到的几个API: 1.router.currentRoute:当前的路由信息对象,我们可以通过router.currentRoute.fullPath获得解析后的 URL,包含查询参数和 hash 的完整路径,如果要访问的页面的路由有命名(name)的话,可以通过router.currentRoute.

Laravel 登录后跳转回登录前浏览的页面

一.经过 Auth 中间件检查后跳转至登录页面 也就是没有通过 auth 中间件的认证检查,被 auth 中间件拦截后跳转至登录页面.这种情况下,Laravel 默认会在用户登录成功后自动跳转回登录前浏览的页面.auth 中间件是怎么做到的? 打开 auth 中间件文件: // vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php protected function authenticate(array

ubuntu-登陆后跳载回登陆界面

现象:在Ubuntu登陆界面输入密码之后,黑屏一闪并且出现了check battery state之类的文字之后,又跳转到登录界面.原因:主目录下的.Xauthority文件拥有者变成了root,从而以用户登陆的时候无法都取.Xauthority文件. 说明:Xauthority,是startx脚本记录文件.Xserver启动时,读文件~/.Xauthority,读入对应其display的记录.当一个需要显示的客户程序启动调用XOpenDisplay()也读这个文 件,并把找到的magic co

session失效后跳转到登陆页面

一.编写Filter拦截器类 1 package com.pv.utils; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.*; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 import javax.servlet.h

0秒后跳转到另一个页面

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <meta http-equiv="Refresh" content="0; url=http://gzpc.zfyyhz.com/gzkh/(跳转到的网址)" /> </head&

rails登录后跳转到登录前的路径

# 重定向到存储的地址或默认地址 def redirect_back_or(default) redirect_to(session[:forwarding_url] || default) session.delete(:forwarding_url) end # 存储以后需要的地址 def store_location session[:forwarding_url] = request.url if request.get? end #判断是否登录,否,则存储需要的地址 def signe

Ajax登陆,使用Spring Security缓存跳转到登陆前的链接

Spring Security缓存的应用之登陆后跳转到登录前源地址 什么意思? 用户访问网站,打开了一个链接:(origin url)起源链接 请求发送给服务器,服务器判断用户请求了受保护的资源. 由于用户没有登录,服务器重定向到登录页面:/login 填写表单,点击登录 浏览器将用户名密码以表单形式发送给服务器 服务器验证用户名密码.成功,进入到下一步.否则要求用户重新认证(第三步) 服务器对用户拥有的权限(角色)判定.有权限,重定向到origin url; 权限不足,返回状态码403( "禁