[Django]登陆界面以及用户登入登出权限

前言:简单的登陆界面展现,以及用户登陆登出,最后用户权限的问题

正文:

首先需要在settings.py设置ROOT_URLCONF,默认值为:

ROOT_URLCONF  = 'www.urls'#用户请求django站点页面首先检查这个模块

这里的www.urls是我的工程www下urls.py文件

urls.py文件主要设置urlpatterns参数,设置如下:

 urlpatterns= [
    url(r'^$', 'login.views.login_view', name='login_view'),#用户登陆界面

    url(r'^admin/', include(admin.site.urls)),#后台登陆
]

这里清理以下思路,当我们访问网页时首先检查ROOT_URLCONF模块,通过观察urls.py文件中的urlpatterns参数设置,网页首先运行login这个APP中的views.py中的login_view函数,当用户输入账户和密码并点击登陆按钮后,判断账户和密码是否正确,若错误,返回首页,正确进入首页.

views.py文件如下:

#coding:utf-8
from django.shortcuts import render,HttpResponse
from django.contrib.auth import authenticate ,logout ,login

from .forms import LoginForm

def login_view(request):
    logout(request)
    if request.method == 'POST':#判断是否为一个POST请求
        form = LoginForm(request.POST)#绑定数据至表单
        if form.is_valid():#判断表单数据是否合法
            uname = form.cleaned_data['username']#获取表单中用户名称
            pword = form.cleaned_data['password']#获取表单中用户密码
            user = authenticate(username=uname, password=pword)#调用authenticate认证用户
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return render(request, 'home/index.html')
                    # Redirect to a success page.
            else:
                response = HttpResponse()
                response.write('<html><script type="text/javascript">alert("密码错误"); window.location=""</script></html>')
                return response
                # Return an 'invalid login' error message.
    else:
        form = LoginForm()
    return render(request, 'login/index.html', {'form': form})

 上面view文件中显示用户登陆的过程大致分为:认证用户--登入用户--登出用户三步这主要的三步 ,认证用户使用函数authenticate,登陆用户使用login,登出用户使用logout

  模板格式如下:

<div class="login">
            <div id="main">
                   <form method="post">
                  {% csrf_token %}
                  {{ form.as_p }}
                  <input type="submit" value="提交" />
                  </form>    
            </div>
       </div>

最后记住必须在登陆用户后才能使用用户权限,模板中使用权限的方法(摘自官方):

模板中的认证数据

当你使用RequestContext时,当前登入的用户和它们的权限在模板上下文中可以访问。

技术细节

技术上讲,这些变量只有在你使用RequestContext并启用了'django.contrib.auth.context_processors.auth'

上下文处理器时才可以在模板上下文中访问到。它是默认产生的配置文件。更多信息,参见RequestContext 文档

用户

当渲染RequestContext模板时,当前登录的用户,可能是User

实例或者AnonymousUser实例,会存储在模板变量{{ user }}中:
{% if user.is_authenticated %}
    <p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}

如果使用的不是RequestContext,则不可以访问该模板变量:

权限

当前登录的用户的权限存储在模板变量{{ perms }}

中。这是个 django.contrib.auth.context_processors实例的封装,他是一个对于模板友好的权限代理。

{{ perms }}

对象中,单一属性的查找是 User.has_module_perms的代理。如果已登录的用户在foo 应用中拥有任何许可,这个例子会显示 True
{{ perms.foo }}

二级属性的查找是User.has_perm的代理。

如果已登录的用户拥有foo.can_vote的许可,这个示例会显示True
{{ perms.foo.can_vote }}

所以,你可以用模板的{% if %}

语句检查权限:
{% if perms.foo %}
    <p>You have permission to do something in the foo app.</p>
    {% if perms.foo.can_vote %}
        <p>You can vote!</p>
    {% endif %}
    {% if perms.foo.can_drive %}
        <p>You can drive!</p>
    {% endif %}
{% else %}
    <p>You don't have permission to do anything in the foo app.</p>
{% endif %}

还可以通过{% if in %}

语句查询权限。例如:
{% if 'foo' in perms %}
    {% if 'foo.can_vote' in perms %}
        <p>In lookup works, too.</p>
    {% endif %}
{% endif %}

  

posted @ 2016-03-17 13:56  CQ_LQJ  阅读(3119)  评论(0编辑  收藏  举报