使用Django的认证(authentication)

来源:互联网 发布:win7下nginx配置php 编辑:程序博客网 时间:2024/05/18 23:27

简单使用django的login, logout.(Django1.11.3)

Django提供了

• login:操作表单(form)中的登录然后登录一个用户
• logout:登出一个用户
• logout_then_login:登出一个用户然后重定向这个用户到登录页面


Django 提供以下视图(views)来操作密码修改:
• password_change:操作一个表单(form)来修改用户密码
• password_change_done:当用户成功修改他的密码后提供一个成功提示页面


Django 还包含了以下视图(views)允许用户重置他们的密码:
 •password_reset:允许用户重置他的密码。它会生成一条带有一个 token 的一次性使用链接然后发送
到用户的邮箱中。
 •password_reset_done:告知用户已经发送了一封可以用来重置密码的邮件到他的邮箱中。
• password_reset_complete:当用户重置完成他的密码后提供一个成功提示页面。

我们创建一个简单的django项目

django-admin startproject bookmarks

在bookmarks里创建app account(账户)

django-admin startapp account
我们的app下主要的两个修饰目录, templates, static,app的模板目录, 还有models, view两个文件

因为django的认证视图期望的认证模块默认的存放路径是templates/registration/所以整个tamplates的目录形式

├── account│   ├── dashboard.html├── base.html└── registration    ├── logged_out.html    └── login.html

static的就不说了, 都应该会配置的.

接下来要设置account的url

#!/usr/bin/env python# coding=utf-8from django.conf.urls import urlfrom . import viewsfrom django.contrib.auth.views import loginfrom django.contrib.auth.views import logoutfrom django.contrib.auth.views import logout_then_loginfrom django.contrib.auth.views import password_changefrom django.contrib.auth.views import password_change_donefrom django.contrib.auth.views import password_resetfrom django.contrib.auth.views import password_reset_donefrom django.contrib.auth.views import password_reset_confirmfrom django.contrib.auth.views import password_reset_completeurlpatterns = [        #url(r'^login/$', views.user_login, name = 'user_login'),        url(r'^$', views.dashboard, name = 'dashboard'),        url(r'^login/$', login, name='login'),        url(r'^logout/$', logout, name = 'logout'),        url(r'logout-then-login/$', logout_then_login, name = 'logout_then_login'),        url(r'password-change/$', password_change, name = 'password_change'),        url('password-change/done/$', password_change_done, name = 'password_change_done'),        url(r'password-reset/$', password_reset, name = 'password_reset'),        url(r'password-reset/done/$', password_reset_done, name = 'password_reset_done'),        url(r'passwored-reset/comfirm/(?P<uidb64>[-\w]+)/(?P<token>[-\w]+)/$', password_reset_confirm, name = 'password_reset_confirm'),        url(r'password-reset/complete/$', password_reset_complete, name = 'password_reset_complete'),        ]
其中dashborad是要自己写的, dashboard函数如下,当正确的登录后的跳转

from django.shortcuts import renderfrom django.http import HttpResponsefrom django.contrib.auth import authenticate, loginfrom .forms import loginFormfrom django.contrib.auth.decorators import login_required@login_requireddef dashboard(request):    return render(request, 'account/dashboard.html', {'section':'dashboard'})

我们还要在settings的文件设置登录或者登出, 登录后的跳转.

from django.core.urlresolvers import reverse_lazy#登录成功后的跳转, dashboard提示登陆成功LOGIN_REDIRECT_URL = reverse_lazy('dashboard')# 重定向登录的URLLOGIN_URL = reverse_lazy('login')#重定向登出的URLLOGOUT_URL = reverse_lazy('logout')

登录的一些页面在这里给出主要部分, url跳转的那些就不写了.

base.html        <div id="header">            <span class="logo">Marks</span>            {% if request.user.is_authenticated %}            <ul class="menu">                <li {% if section == "dashboard" %} class="selected"{% endif %}>                    <a href="{% url 'dashboard' %}">My dashboard</a>                </li>                <li {% if sextion == "images" %} class="selected"{% endif %}>                    <a href="#">Images</a>                </li>                <li {% if section == "people" %} class="selected"{% endif %}>                    <a href="#">People</a>                </li>            </ul>            {% endif %}            <span class="user">                <!--对request带来的用户的认证-->                {% if request.user.is_authenticated %}                    Hello {{ request.user.first_name }}                    <!--登出-->                    <a href="{% url 'logout' %}">Logout</a>                {% else %}                    <a href="{% url 'login' %}">Log-in</a>                {% endif %}            </span>        </div>login.html    {% if form.errors %}        <p>            Your username and password didn't match            Please try again        </p>    {% else %}        <p> Please use follow form to login</p>    {% endif %}    <div class="login-form">        <form action="{% url 'login' %}" method="post">    <!--将form表单定义的字段,在这里展现成<input>-->            {{ form.as_p }}            {% csrf_token %}            <input type="hidden" name="next" value="{{ next }}" />            <input type="submit" value="login" />        </form>    </div>loggout.html<h1>Logged out </h1>    <p>You have successfully logged out.</p>    <!--判断重新登录的--> You can <a href="{% url 'login' %}">log-in again</a>.</p>


我们通过localhost:8000/account/login/来得到登录界面.



登录后的



登出:



这只是django学习的一只小部分, 继续加油.


阅读全文
0 0
原创粉丝点击