[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文件夹中 系统要能够进行登入错误次 ...
随机推荐
- css3实现光标悬浮滚动菜单
效果:http://hovertree.com/texiao/css3/21/ 本文所用到的CSS知识请点击效果展示也中第一和第二个链接. 代码: <!DOCTYPE html> < ...
- js的touch事件的实际引用
一开始做前端页面的时候,接触的也是js,但是随后便被简单高效的jquery吸引过去,并一直使用至今. 而js,则被我主观的认为底层技术而抛弃. 直到这几天工作需要,研究移动端页面的触屏滑动事件,搜索j ...
- .NET多线程总结和实例介绍
摘要:.Net提供了许多多线程编程工具,可能是因为太多了,所以掌握起来总是有一些头疼,我在这里讲讲我总结的一些多线程编程的经验,希望对大家有帮助. 1.多线程的总结 不需要传递参数,也不需要返回参数 ...
- EF Core1.0 CodeFirst为Modell设置默认值!
当我们使用CodeFirst时,有时候需要设置默认值! 如下 ; public string AdminName {get; set;} = "admin"; public boo ...
- BZOJ 1044 木棍分割 解题报告(二分+DP)
来到机房刷了一道水(bian’tai)题.题目思想非常简单易懂(我的做法实际上参考了Evensgn 范学长,在此多谢范学长了) 题目摆上: 1044: [HAOI2008]木棍分割 Time Limi ...
- python征程1.2(初识python)
1.操作符. 和其他绝大多数语言一样,Python的算术操作符以你熟悉的方式工作. “+,—,×,/,//,%,**,” 注意:python有两种除法操作符(1)单斜杠用以传统除法,(2)双斜杠用以浮 ...
- 微信公众平台自动回复wechatlib.jar的生成及wechatlib解析
微信公众平台出来有一段时日了,官方提供的自动回复的接口调用大致是这么些类型(text/image/location/link),每个项目都如此拷贝代码,在笔者看来比较麻烦,今天乘着点闲暇的时间特意将这 ...
- 20个编写现代 CSS 代码的建议
明白何谓Margin Collapse 不同于其他很多属性,盒模型中垂直方向上的Margin会在相遇时发生崩塌,也就是说当某个元素的底部Margin与另一个元素的顶部Margin相邻时,只有二者中的较 ...
- 彻底解决mysql中文乱码的办法 ???
MySQL会出现中文乱码的原因不外乎下列几点:1.server本身设定问题,例如还停留在latin12.table的语系设定问题(包含character与collation)3.客户端程式(例如p ...
- 云南南天电子信息产业股份有限公司某站SQL注入漏洞
220.163.13*.** root@kali:~# sqlmap -u http://www.****.com.cn/****.Aspx?keyword= -v 1 --dbs --tam ...