[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 %}
[Django]登陆界面以及用户登入登出权限的更多相关文章
- SpringBoot整合SpringSecurity简单实现登入登出从零搭建
技术栈 : SpringBoot + SpringSecurity + jpa + freemark ,完整项目地址 : https://github.com/EalenXie/spring-secu ...
- django项目 设置session 实现用户登入登出
一.配置文件 settngs.py中 # 使用django认知系统的登录状态装饰器时,没有登录的话,跳往登录页面后路径是/acount/login 需要重新指定 LOGIN_URL = '/user/ ...
- django登陆界面报错InternalError at /admin/polls/question/add/
登陆界面报错信息如下: 改为输入英文,正确
- Django 是如何实现用户登录和登出机制的(默认版本-数据库版本)
Django session 字典,保存到数据库的时候是要先序列化的(session.encode方法), 读取的时候反序列化(session.decode),这样比较安全. 一 settings.p ...
- Linux-基本操作(登入登出,图形化界面,命令行界面)
命令行界面登录 (1)命令行登录界面 安装好Centos后,系统启动默认进入的是图形化界面,可以通过如下命令修改进入命令行界面: 命令行登录:systemctl set-default multi ...
- MYSQL数据库的安装,配置文件,登入
07.13自我总结 MYSQL数据库 一.MYQL数据库的安装 可以去mysql官网下载mysql压缩包 运行程序:在bin文件夹中,其中客户端运行文件是mysql.exe,服务端运行文件为mysql ...
- pyqt5简单登陆界面
登陆界面姓名输入错误会弹出错误信息.正确就会弹出第二个窗体. # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets import Q ...
- Django,COOKIES,SESSION完成用户登入
1.urls.py """Django_cookie_session URL Configuration The `urlpatterns` list routes UR ...
- python编辑用户登入界面
1.需求分析 登入界面需要达到以下要求: 系统要有登入和注册两个选项可供选择 系统要能够实现登入出错提示,比如账户密码错误等,用户信息保存在user_info.txt文件夹中 系统要能够进行登入错误次 ...
随机推荐
- null和undefined的一些区别
读了阮一峰的博客,自己总结一下,便记录一篇博客 在javacript的基本类型中,有2种基本类型,只有1个值,便是null和undefined,都表示的是"无".在一定程度上是相等 ...
- 基于DevExpress的Winform程序安装包的制作
在我们做系统开发的时候,都会面临一个安装包制作的问题,如何把我们做好的系统,通过安装包工具整合成一个安装包给客户进行安装.安装包的优势就是一步步安装就可以了,不用复制一大堆文件给客户,还怕缺少那个文件 ...
- webServices与Web服务
本篇的内容在MSND中标注已是一项旧技术,而取而代之的是WCF, 那么我也放弃吧!但是这个属于Web服务的范畴,而WCF本质上也是一个Web服务来的,所以对于基础的东西还是不变的.那么这次就着重看看这 ...
- 增加线程异步发送消息的方法一(Thread)
@RequestMapping(value="order/updateOrder.do") public String updateOrder(HttpServletRequest ...
- spring-stutrs求解答
这里贴上applicationContext里的代码: <?xml version="1.0" encoding="UTF-8"?> <bea ...
- Ext.NET MVC 配置问题总结
随着VS版本和.NET MVC版本.EF的版本的不断更新,虽然很多功能随着版本的提升而更完善,但对于旧版本开发的软件就有点悲催了,或许很多开发者都遇到类似的问题! 最近有一个项目是用.NET MVC3 ...
- Web(Jsp+ Servlet)开发中如何解决中文乱码问题
1.中文乱码的成因 编码的字符集和解码的字符集不一致. 2.web开发过程中可能出现的乱码的位置及解决方案 ①request乱码 在向服务器传递数据时,所传递的中文有可能出现乱码. post请求(协议 ...
- 自己写一个 jQuery 插件
我知道这一天终将会到来,现在,它来了. 需求 开发 SharePoint 的 CSOM 应用时,经常需要在网页上输出一些信息. 这种需求和 alert 的弹窗.F12 的断点查看信息的场景是不一样的: ...
- IOS 序列化与反序列化NSKeyedUnarchiver
开篇 1到底这个序列化有何作用? 面向对象的程序在运行的时候会创建一个复杂的对象图,经常要以二进制的方法序列化这个对象图,这个过程叫做Archiving. 二进制流可以通过网络或写入文件中. 当你写的 ...
- iOS-多线程之GCD(原创)
前言 GCD 全称 Grand Central DisPath NSOperation便是基于GCD的封装 基础知识 1.GCD的优势 (1)为多核的并行运算提出了解决方案 (2)GCD会自动利用更多 ...