比如在每个页面的最上面部分需要显示用户的登录名称,如果不登录则显示为Guest。这部分内容在每个页面都会出现,所以可将该部分内容作为一个公共模板(如userauth.html),如然后在其他模板中进行引用。

userauth.html内容如下:

<table class="table table-bordered">
<thead>
<tr>
{% if user_loggedin %}
<th id="welcome">Welcome: {{user_loggedin}}</th>
<th id="errorb" style="display:none">eeeeth: {{errorb}}</th>
{% endif %}
<th> <a class="text-info" href="{% url 'aptest:logout' %}">LOGOUT</a> </th>
</tr>
</thead>
</table>

现在需要在访问每个view的时候,该用户名都可以自动得到,不需要再在每个view中单独定义username,然后再将该username渲染到模板中。

解决方法:

  可以通过使用context_processors设置每个视图的共同变量,Context处理器允许设置一些变量,它们会在每个context中自动被设置好,可以被每个view自动调用,自动渲染到模板中,而不必每次调用 render_to_response() 时都指定。可以参考下C:\Django\django\template\context_processors.py文件中的公共变量。

1.新建C:\Django\workplace\sf\aptest\my_context_processors.py,内容如下:

该文件用于获取用户的username,将其存放于context中,从而可在模板中直接使用。

# -*- coding: UTF-8 -*-
#根据用户是否登录获得其username用于显示在Welcome Username。
def Get_user_loggedin(request):
userinfo = request.session.get('s_username',None)
if not userinfo:
user_loggedin='Guest'
else:
user_loggedin=request.session['s_username']
context={'user_loggedin':user_loggedin}
return context

2.编辑settings.py,添加如下内容:

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'aptest.my_context_processors.Get_user_loggedin', #此为新加内容,aptest为该app的名字,Get_user_loggedin为my_context_processors.py中定义的函数名称
],
},
},
]

index view内容如下:

@login_req()
def index(request): #主页
import json
a=request.POST.get('a')
b=request.POST.get('b')
if a is not None and b is not None:
PLUS=int(a) + int(b)
MuLT=int(a) * int(b)
rets={'r1':PLUS,'r2':MuLT}
retsj=json.dumps(rets)
return HttpResponse(retsj)
#context={'user_loggedin':user_loggedin},context #此处无需再定义user_loggedin变量,index.html模板可以自动从my_context_processors.py中得到
return render(request,'aptest/index.html')

index.html模板引用了userauth.html模板内容,具体同http://www.cnblogs.com/dreamer-fish/p/5417190.html。在访问index view时,访问结果如下:

参考:https://segmentfault.com/a/1190000002461627

另一种方式,使用request.user直接显示用户登录名,view中不需要做任何设置(简单):

编辑userauth.html模板文件:

写法一:

<table class="table table-bordered">
<thead>
<tr>
{% if request.user.is_anonymous %} <!--判断当前是否为匿名用户,如果是的话,request.user返回AnonymousUser实例-->
<th id="welcome">Welcome: Guest</th>
{% else %}
<th id="welcome">Welcome: {{request.user}}</th>
<th id="errorb" style="display:none">eeeeth: {{errorb}}</th>
{% endif %}
<th> <a class="text-info" href="{% url 'aptest:logout' %}">LOGOUT</a> </th>
</tr>
</thead>
</table>

写法二:

<table class="table table-bordered">
<thead>
<tr>
{% if request.user.username %}
<!--匿名用户返回None--> <!-- {% if request.user.is_authenticated  %} 也可以使用-->
<th id="welcome">Welcome: {{request.user}}</th>
<th id="errorb" style="display:none">eeeeth: {{errorb}}</th>
{% else %}
<th id="welcome">Welcome: Guest</th>
{% endif %}
<th> <a class="text-info" href="{% url 'aptest:logout' %}">LOGOUT</a> </th>
</tr>
</thead>
</table>

django.contrib.auth.models.AnonymousUser 是一个类,它实现了 django.contrib.auth.models.User 接口,有如下的不同点:

  • id 总是 None.
  • is_anonymous() 返回 True 而不是 False.
  • is_authenticated() 返回 False 而不是 True.

print request.user

设置全局context变量 (显示用户登录名)的更多相关文章

  1. logname - 显示用户登录名

    总览 (SYNOPSIS) logname [OPTION]... 描述 (DESCRIPTION) 显示 当前用户 的 名字. --help 显示 帮助信息, 然后 结束. --version 显示 ...

  2. UBUNTU 下设置全局 path变量

    全局的对所有用户都可以的使用的PATH: 可以通过修改配置文件: /etc/bashrc 和 /etc/profile 来时配置, 全局的PATH; 例如: vi /etc/profile 在最后后加 ...

  3. java web设置全局context参数

    先在生成的web.xml文件中配置全局参数变量(Parameter:参数) <web-app> <context-param> 设置parameter(参数)的识别名字为adm ...

  4. centos7 设置grub密码及单用户登录实例

    centos7与centos6在设置grub密码的操作步骤上有很大的差别,特此记录供以后查用 grub加密的目的: 防止不法分子利用单用户模式修改root密码 给grub加密可以采用明文或者加密的密文 ...

  5. day01-3-界面显示&用户登录&餐桌状态显示

    满汉楼01-3 4.功能实现02 4.2菜单界面显示 4.2.1功能说明 显示主菜单.二级菜单和退出系统功能 4.2.2代码实现 先搭建界面显示的大体框架,具体的功能后面再实现 创建MHLView类: ...

  6. Android设置全局Context

    新建一个java继承Application类 import android.app.Application; import android.content.Context; /** * 编写自定义Ap ...

  7. 设置Fedora能够使用root用户登录

    1. 切换到root工作环境,因为一下操作必须拥有root权限 [ha@localhost ~]$ su root密码: 2. 编辑/etc/pam.d/gdm [root@localhost ha] ...

  8. ssh公钥认证原理及设置root外的其他用户登录ssh

    1)创建其他用户 useradd [-d 登录目录] [-G ssh][用户名]  一定要将用户添加到ssh组不然无法没有权限登录ssh 2)设置ssh不允许root登录 vi /etc/ssh/ss ...

  9. MOss213获得用户登录名

    因SharePoint2013默认使用claims based authentication,所以其帐号会是i:0#.w|/domain name这样的格式,如何去掉前面的内容,只保留登录帐号呢? 参 ...

随机推荐

  1. 国际化实现之安装脚手架vue以及打包问题

    做这个项目用的是vue+element UI来实现的响应式布局,现主要说一下国际化这块的实现. 第一步:新建文件夹i18n 第二步:配置cn.js.en.js等文件内容 cn.js import en ...

  2. 功能------常用快捷键(在win10下)

    功能------win10 常用快捷键 在进行学习,记录,编写代码时,需要用到一些功能,用鼠标浪费时间,可以使用快捷键来快速的处理.方便操作. 以下内容分为两类.快捷键以及触控板类(不能享用鼠标) 快 ...

  3. sendsms短信验证功能实现代码

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name ...

  4. angularjs 依赖注入原理与实现

    在用angular依赖注入时,感觉很好用,他的出现是 为了“削减计算机程序的耦合问题” ,我怀着敬畏与好奇的心情,轻轻的走进了angular源码,看看他到底是怎么实现的,我也想写个这么牛逼的功能.于是 ...

  5. Html5音频播放

    Audio标签: 不需要下载任何的额外的浏览器插件 完全由浏览器自身实现音频的解码和播放 用法: <audio src="1.mp3" controls></au ...

  6. SpringBoot整合mybatis-plus入门

    pom.xml中加入如下依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>myba ...

  7. hdu Square DFS

    Square Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  8. Java Web整合开发王者归来(JSP + Servlet + Struts + Hibernate + Spring) - 读书笔记

    第1章 状态码表示响应类型: 保留 表示请求成功地接收 完成请求客户需进一步细化请求 客户错误 服务器错误 Web服务器: Apache服务器,特长是处理静态页面,效率非常高. Tomcat提供对JS ...

  9. Yii 之widget

    默认情况下, widget 的视图文件位于包含了widget文件的 views 子目录之下.这些视图可以通过调用 CWidget::render()渲染,这一点和控制器很相似.唯一不同的是,widge ...

  10. NodeJs -- express 快速建站

    直接上干货 1.新建一个目录来存放我们即将要做的东西: 2.win+R打开小黑框:进入到我们的目录下: 3.首先我们要全局安装Express框架:**在这一步之前要确保你本机上安装了node:** n ...