1.Django视图初探
一个最简单的视图:
from django.shortcuts import HttpResponse def model_test(request): return HttpResponse("Hello World!")
该视图返回一个HttpResponse
对象,是一个字符串
同时,在url处我们还要有一些操作,在项目主urls.py文件定义单个app中的urls.py路径:
path('post/', include('post.urls')),
在app中的urls.py文件中:
from django.urls import path from . import views urlpatterns = [ path('watch/', views.model_test), ]
访问:http://127.0.0.1:8000/post/watch/
2.视图的请求与响应对象
HttpRequest
每当请求到来的时候,Django就会创建一个携带有请求元数据的HttpRequest
对象,传递给视图函数的第一个参数
method:
method是一个字符串类型的值,标识请求所使用的HTTP方法,例如GET、POST、PUT等
def model_test(request): return HttpResponse("Hello World!" + request.method) # Hello World!GET
添加@csrf_exempt装饰器,用POST方法请求对应的URL,可以获得与GET请求同样的响应:
from django.views.decorators.csrf import csrf_exempt @csrf_exempt def model_test(request): return HttpResponse("Hello World!" + request.method)
有时候,可能需要明确只能接受特定的请求方法,Django也对此提供了支持,利用@require_http_methods装饰器指定视图可以接受的方法。例如,只允许接受POST请求,那么,可以这样配置:
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.http import require_http_methods @csrf_exempt @require_http_methods(["POST"]) def model_test(request): return HttpResponse("Hello World!" + request.method)
scheme:
标识请求的协议类型(http或https)
GET:
这是一个类字典对象,包含GET请求中的所有参数
def model_test(request): return HttpResponse("Hello World!" + request.GET.get('a', '0'))
此时访问路径:http://127.0.0.1:8000/post/watch/?a=1
POST:
与GET属性类似,POST属性中保存的是POST请求中提交的表单数据
FILES:
这个属性只有在上传文件的时候才会用到,它也是一个类字典对象,包含所有的上传文件数据。FILES属性中的每个键是中的name值,FILES中的每个值是一个UploadedFile
COOKIES:
它是一个Python字典(dict)对象,键和值都是字符串,包含了一次请求的Cookie信息
META:
一个Python字典对象,包含了所有的HTTP头部信息
CONTENT_LENGTH:标识请求消息正文的长度,对于POST请求来说,这个请求头是必需的。
CONTENT_TYPE:请求正文的MIME类型,对应于/post/hello/请求,它的值可以是text/plain。
HTTP_HOST:客户端发送的HTTP主机头。
HTTP_USER_AGENT:通常被称为UA,用于标识浏览器的类型,如果视图返回的数据是需要区分浏览器的,那么这个字段会非常有用。
REMOTE_ADDR:客户端的IP地址,这个字段通常用于记录日志或根据IP确定地域再做处理。
REMOTE_HOST:客户端的主机名。
REQUEST_METHOD:标识HTTP请求方法,例如GET、POST等。
SERVER_NAME:服务器的主机名。
SERVER_PORT:服务器的端口号,用一个字符串标识,例如“8000”。
user:
标识当前登录用户的AUTH_USER_MODEL实例,它其实是Django用户系统中的User(auth.User)类型
HttpResponse
status_code:
用来标识一次请求的状态。常见的状态码有200标识请求成功、404标识请求的资源不存在、500标识服务器内部错等
content:
存储响应内容的二进制字符串
write方法:
这个方法将HttpResponse视为类文件对象,可以向其中添加响应数据
操作响应头:
给HttpResponse添加响应头:
def model_test(request): response = HttpResponse() response['project'] = 'IMUSTCTF' response['app'] = 'post' return response
重新访问视图,查看响应头已经有了project和app: