比如在每个页面的最上面部分需要显示用户的登录名称,如果不登录则显示为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. UML——六大关系整理

    UML——六大关系整理 1.定义 是一种面向对象的建模语言,它是运用统一的.标准化的标记和定义实现对软件系统进行面向对象的描述和建模(百度百科). 2.六种关系 这六种关系分别为,继承.实现.关联.聚 ...

  2. Object类上的方法

    1.getClass: public final native Class<?> getClass(); 返回当前对象运行时的类的对象. 2.hashCode: public native ...

  3. input属性type为file打开文件资源管理器时,如何限制多次选取或只能一次选取的行为

    1.input标签没有设置multiple属性,文件资源管理器默认一次选取 <!doctype html> <html lang="en"> <hea ...

  4. hadoop学习笔记(五):HDFS Shell命令

    一.HDFS文件命令 以下是比较重要的一些命令: [root@master01 hadoop]# hadoop fs -ls / //查看根目录下的所有文件 [root@master01 hadoop ...

  5. 【转】Visio绘制WEB流程图的心得

    一个哥们在MSN上告诉我,他们公司的交互设计师只产出流程图,并问我用什么标准评价流程图的好坏.他的说法把我彻底震了-这分工也太细了吧!也不知道该说他们那里这样是好还是不好. 不过仔细想来,我倒的确没有 ...

  6. Android 蓝牙操作详解

    1.启用蓝牙并使设备处于可发现状态    1.1 在使用BluetoothAdapter类的实例进操作之前,应启用isEnable()方法检查设备是否启用了蓝牙适配器.       // 使用意图提示 ...

  7. JavaScript push()函数追加数组数据

    将数据追加到一个数组末尾的最简单的方法是通过 push() 函数. .push() 允许有一个或多个参数,并把它“push”到数组的末尾. var arr = [1,2,3];arr.push(4); ...

  8. 【转】C#中continue、break和return用法

    continue和break的用法一样,直接写上这个单词,后面加一个分号就行 比如: continue; break; 我们先来谈continue 看代码 for (int i=0; i<10; ...

  9. NSLayoutConstraint 遍历查找对应的约束

      当我们使用纯代码方式Autolayout进行布局约束时,一个view上可能添加了很多的约束.而这些约束又不像view一样有一个可以区分的tag值,茫茫约束中想查到想要的约束然后进行更改,好像很难. ...

  10. ASP.NET Core 2 学习笔记(十一)Cookies & Session

    基本上HTTP是没有记录状态的协定,但可以通过Cookies将Request来源区分出来,并将部分数据暂存于Cookies及Session,是写网站常用的用户数据暂存方式.本篇将介绍如何在ASP.NE ...