zoukankan      html  css  js  c++  java
  • [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 %}
    

      

  • 相关阅读:
    hihoCoder #1176 : 欧拉路·一 (简单)
    228 Summary Ranges 汇总区间
    227 Basic Calculator II 基本计算器II
    226 Invert Binary Tree 翻转二叉树
    225 Implement Stack using Queues 队列实现栈
    224 Basic Calculator 基本计算器
    223 Rectangle Area 矩形面积
    222 Count Complete Tree Nodes 完全二叉树的节点个数
    221 Maximal Square 最大正方形
    220 Contains Duplicate III 存在重复 III
  • 原文地址:https://www.cnblogs.com/CQ-LQJ/p/5287144.html
Copyright © 2011-2022 走看看