前言:简单的登陆界面展现,以及用户登陆登出,最后用户权限的问题

正文:

首先需要在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]登陆界面以及用户登入登出权限的更多相关文章

  1. SpringBoot整合SpringSecurity简单实现登入登出从零搭建

    技术栈 : SpringBoot + SpringSecurity + jpa + freemark ,完整项目地址 : https://github.com/EalenXie/spring-secu ...

  2. django项目 设置session 实现用户登入登出

    一.配置文件 settngs.py中 # 使用django认知系统的登录状态装饰器时,没有登录的话,跳往登录页面后路径是/acount/login 需要重新指定 LOGIN_URL = '/user/ ...

  3. django登陆界面报错InternalError at /admin/polls/question/add/

    登陆界面报错信息如下: 改为输入英文,正确

  4. Django 是如何实现用户登录和登出机制的(默认版本-数据库版本)

    Django session 字典,保存到数据库的时候是要先序列化的(session.encode方法), 读取的时候反序列化(session.decode),这样比较安全. 一 settings.p ...

  5. Linux-基本操作(登入登出,图形化界面,命令行界面)

    命令行界面登录 (1)命令行登录界面 安装好Centos后,系统启动默认进入的是图形化界面,可以通过如下命令修改进入命令行界面: 命令行登录:systemctl  set-default  multi ...

  6. MYSQL数据库的安装,配置文件,登入

    07.13自我总结 MYSQL数据库 一.MYQL数据库的安装 可以去mysql官网下载mysql压缩包 运行程序:在bin文件夹中,其中客户端运行文件是mysql.exe,服务端运行文件为mysql ...

  7. pyqt5简单登陆界面

          登陆界面姓名输入错误会弹出错误信息.正确就会弹出第二个窗体. # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets import Q ...

  8. Django,COOKIES,SESSION完成用户登入

    1.urls.py """Django_cookie_session URL Configuration The `urlpatterns` list routes UR ...

  9. python编辑用户登入界面

    1.需求分析 登入界面需要达到以下要求: 系统要有登入和注册两个选项可供选择 系统要能够实现登入出错提示,比如账户密码错误等,用户信息保存在user_info.txt文件夹中 系统要能够进行登入错误次 ...

随机推荐

  1. 从零开始,搭建博客系统MVC5+EF6搭建框架(4)上,前后台页面布局页面实现,介绍使用的UI框架以及JS组件

    一.博客系统进度回顾以及页面设计 1.1页面设计说明 紧接前面基础基本完成了框架搭建,现在开始设计页面,前台页面设计我是模仿我博客园的风格来设计的,后台是常规的左右布局风格. 1.2前台页面风格 主页 ...

  2. scikit-learn一般实例之一:保序回归(Isotonic Regression)

    对生成的数据进行保序回归的一个实例.保序回归能在训练数据上发现一个非递减逼近函数的同时最小化均方误差.这样的模型的好处是,它不用假设任何形式的目标函数,(如线性).为了比较,这里用一个线性回归作为参照 ...

  3. 7.DataAnnotations(数据注解)【Code-First 系列】

    EF Code-First提供了一系列的数据注解的特性,你可以将其应用到你的领域类和属性中,数据注解属性重写了EF默认的约定. System.ComponentModel.DataAnnotation ...

  4. C# EPL USB 指令打印

    private void btnPrinter_Click(object sender, EventArgs e) { #region ESC 热敏图像点阵像素点读取打印 //Bitmap bitma ...

  5. 基于Quartz.NET构建自己的动态作业调度器

    在日常的开发中,运行定时任务基本上已经是很普遍的需求了,可以通过windows服务+timer组件来实现,也可以使用第三方框架来集成,Quartz.NET就是一款从JAVA的Quartz移植过来的一个 ...

  6. php基础知识

    PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言[脚本在服务器上执行]. PHP 文件能够包含文本.HTML.CSS 以及 PHP 代码,在服务器上的执行结果以纯文本返回浏览器. php可以 ...

  7. mybatis 中的where标签

    mybatis中的where标签可以去除 开头的 and 或者 or 但是放在后面的不行 失败的: <select id="countNotesByParam" parame ...

  8. Netty(六)UDP在netty中的使用

    关于UDP的介绍,这里不在阐述.相比于TCP而言,UDP不存在客户端和服务端的实际链接,因此不需要为连接(ChannelPipeline)设置handler. 服务端: public void run ...

  9. node学习笔记

    一.准备(github地址) 什么是Javascript? ... Javascript能做什么? ..... 浏览器中的Javascript可以做什么? 操作DOM(增删改查) AJAX/跨域 BO ...

  10. js 之 continue break return 用法及注意事项

    1,continue continue有两种用法: 1,continue; 这种用法必须包含在循环里,否则报错,例子: for(var i=0;i<10;i++){ if(i%2===0){ c ...