Django 使用Request 对象和Response 对象在系统间传递状态。
当请求一个页面时,Django会建立一个包含请求元数据的 HttpRequest 对象。 当Django 加载对应的视图时,HttpRequest 对象将作为视图函数的第一个参数。每个视图会返回一个HttpResponse 对象。
以下列举常用的几种属性:
1、request.user
一个AUTH_USER_MODEL 类型的对象,表示当前登录的用户。你可以通过is_authenticated() 区分它们,像这样:
if request.user.is_authenticated():
# Do something for logged-in users.
else:
# Do something for anonymous users.
如果登录的话,可以通过request.user获取当前登录的用户信息。
2、request.method
一个字符串,表示请求使用的HTTP 方法。必须使用大写。例如:
if request.method == 'GET':
do_something()
elif request.method == 'POST':
do_something_else()
3、request.GET/POST
request.GET: 一个类似于字典的对象,包含HTTP GET 的所有参数。
request.POST: 一个包含所有给定的HTTP POST参数的类字典对象,提供了包含表单数据的请求。
在HttpRequest 对象中,GET 和POST 属性是django.http.QueryDict 的实例,它是一个自定义的类似字典的类,用来处理同一个键带有多个值。这个类的需求来自某些HTML 表单元素传递多个值给同一个键, 是一个显著的例子。
request.POST 和request.GET 的QueryDict 在一个正常的请求/响应循环中是不可变的。若要获得可变的版本,需要使用.copy()。
通常的用法是通过request.POST.get() 获得前端表单中的数据:
def myapp(request):
if request.method == 'POST':
username = request.POST.get('username', '')
password = request.POST.get('password', '')
...
通过request.GET.get()
方法获取url传递的参数:
views.py
#url 为 127.0.0.1:8000/index/?sort=hot
def myapp(request):
if request.method == 'GET':
sort = request.GET.get('sort', '')
...
4、request.path
一个字符串,表示请求的页面的完整路径,不包含域名。
base.html
<li {% if request.path == '/' %}class="active"{% endif %}><a href="{% url 'index' %}">首页a>li>
还可以通过过滤器request.path|slice:'x'
得到域名中指定的长度,从而进行判断。
5、request.META
request.META 是一个Python字典,包含了所有本次HTTP请求的Header信息,比如用户IP地址和用户Agent(通常是浏览器的名称和版本号)。
我们可以用request.META.get()方法来得到其中需要的信息,但是前提条件是我们需要知道Header中存在哪些数据,如果不存在的话,需要对其进行报错处理。
我们可以通过如下方式知道Header中存在哪些数据:
values = request.META.items()
for i in values:
print(i)
……
更多request的用法,参见官方文档:点此进入