[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模板时,当前登录的用户,可能是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 %}