1. Request对象方法和属性
-
request.method
:
获取请求方法 -
request.GET
orrequest.POST
:
获取GET or POST请求参数,字典形式。 -
request.POST.get('name',default=None)
:
获取POST请求参数 -
request.GET.getlist('name',default=None)
:
获取GET参数列表 -
request.META
:
包含当前HTTP请求的Headers头部信息, 字典形式。键值KEY都是大写。比如request.META['REMOTE_ADDR']
可获取用户远程IP地址。 -
request.user
:
获取当前访问用户的所有信息。 -
request.path
:
获取当前访问路径。
2. 常用request.META属性
request.META 是一个Python字典,包含了所有本次HTTP请求的Header信息,常用属性包括:
-
REQUEST_METHOD: 当前请求方法, GET或POST
-
HTTP_USER_AGENT: 用户浏览器的字符串, 比如Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36。注意
-
REMOTE_ADDR: 客户端IP地址,比如54.489.102.201 。
-
PATH_INFO: 当前路径信息,如"/index", 等同于request.path
注意有些用户的User Agent的字符串获取不了,所以使用python的get方法request.META.get('HTTP_USER_AGENT', 'unknown') 要好于request.META['HTTP_USER_AGENT'],防止抛出错误异常。
3. 负载均衡中如何获取远程用户的真实IP地址
解决办法如下:
1. 在settings.py中需要添加如下这个中间件
django.middleware.http.SetRemoteAddrFromForwardedFor
2. 视图views.py改为:
from django.shortcuts import render
def index(request):
user = request.user
user_agent = request.META.get('HTTP_USER_AGENT', 'unknown')
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR', '')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0] # 所以这里是真实的ip
else:
ip = request.META.get('REMOTE_ADDR') # 这里获得代理ip
context = {'user': user, 'user_agent': user_agent, 'ip': ip, }
return render(request, "request_demo/index.html", context)