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 %}
    

      

  • 相关阅读:
    20个Flutter实例视频教程-第07节: 毛玻璃效果制作
    20个Flutter实例视频教程-第06节: 酷炫的路由动画-2
    20个Flutter实例视频教程-第05节: 酷炫的路由动画-1
    20个Flutter实例视频教程-第04节: 不规则底部工具栏制作-2
    20个Flutter实例视频教程-第03节: 不规则底部工具栏制作-1
    20个Flutter实例视频教程-第02节: 底部导航栏制作-2
    hdu5371Hotaru&#39;s problem manacher算法
    怎样解除内容审查程序的password
    SQLite -- 嵌入式关系型数据库
    PIC18F4520 + NRF24L01
  • 原文地址:https://www.cnblogs.com/CQ-LQJ/p/5287144.html
Copyright © 2011-2022 走看看